第10章:结构和联合
10.1 结构基础知识
聚合数据类型能够同时存储超过一个的单独数据。C语言中有两种aggregate data type:数组和结构
10.1.1 结构声明
在声明结构时,必须列出它包含的所有成员,包括每个成员的类型和名字。
语法:struct tag{member - list}variable-list;

后面的variable-list是用来创建变量的。
上面的创建方式也可以写成这样:


创建结构还有一种更好的技巧:用typedef定义
typedef struct{ int a; char b; float c; } Simple;
这个方法与上面的效果几乎一模一样,区别仅仅在于现在Simple是一个结构类型名称而不是一个结构标签。后续的声明只需要 Simple x;与java的对象创建相同
10.1.2 结构成员
结构成员可以使标量数组指针甚至是其他结构

10.1.3 结构成员的直接访问
结构变量的成员是通过点操作符(.)访问的,这点和java的对象引用一致。
点操作符和下表引用具有相同的优先级,他们的结合性都是从左向右。
10.1.4 结构成员的间接访问
假设我们现在有一个指向结构的指针(struct simple *c),我们该如何访问这个结构的成员呢?
一种方法是(*c).f
但是c语言提供了一种更为方便的操作符:->.于是上面的表达式可以写为c ->f .
10.1.5 结构的自引用
在结构的内部不可以包含这个结构的本身。这点与面向对象语言有巨大差别
struct SELF_REF1 { int a ; struct SELF_REF1; } ;
类似这样的引用是非法的,但是下面这种引用却是合法的.
struct tree{ int a; struct tree *node; };
这种结构里面包括自身结构的指针被应用到链表和树等数据结构中,
10.1.6 不完整的声明
设想一下我们要声明一些相互之间存在依赖的结构。也就是说一个结构包含了另一个的成员。但是这些结构声明的顺序该怎么定义呢?这时候我们就需要用到不完整的声明,这种方法和函数的声明类似。

10.1.7 结构的初始化
结构的初始化和数组的初始化很相似,由位于一对花括号内部,由逗号分割的初始值列表可用于结构各个成员的初始化。



浙公网安备 33010602011771号