查看文章 |
第六章 结构(一)
结构是多个变量的集合,它们类型可能不同,被放在同一个名字下看成一个整体,方便操作。
结构类型的声明:声明一个结构实际上定义了一个类型,可以在花括号后面直接跟变量名列表,并分配存储空间,也可以仅声明结构的模板,之后再利用结构标签定义结构实例。
结构变量的初始化:结构可以通过一个对应各成员的常量表达式列表进行初始化,自动结构还可以通过赋值和返回结构类型的函数进行初始化。
结构可以嵌套: struct point { int x; int y; }; struct rectangle { struct point pt1; struct point pt2; } screen; screen.pt1.x = 100; screen.pt1.y = 50;
结构不可以用自身递归定义,但可以包含指向自身类型的指针: struct node { struct node* left; struct node* right; ... };
对结构的合法操作:复制和作为一个单元对其赋值(包括作为参数传递和作为函数返回值)、用&取地址、访问结构成员。结构之间不能比较。
结构指针: 当一个较大的结构作为参数传递时,传递指向它的指针比拷贝整个结构更为高效。 struct point origin; struct point *pp = &origin; origin.x等价于(*PP).x等价于pp->x。 访问成员的操作符 . 和 -> 都从左至右结合,具有很高的优先级。
结构数组:数组的每个成员都是一个结构。 struct key { char *word; int count; } keytab[NKEYS] = { "auto", 0, "break", 0, "char", 0, /* ... */ "void", 0, "volatile", 0, "while", 0 };
|