34-匿名联合(C11)
14.10.2 匿名联合(C11)
匿名联合和匿名结构的工作原理相同,即匿名联合是一个结构或联合的无名联合成员。例如,我们重新定义 car_data 结构如下:
struct owner {
char socsecurity[12];
...
};
struct leasecompany {
char name[40];
char headquarters[40];
...
};
struct car_data {
char make[15];
int status; /* 私有为0,租赁为1 */
union {
struct owner owncar;
struct leasecompany leasecar;
};
...
};
现在,如果 flits 是 car_data 类型的结构变量,可以用 flits.owncar.socsecurity 代替 flits.ownerinfo.owncar.socsecurity 。
总结:结构和联合运算符
成员运算符:.
一般注释:
该运算符与结构变量或联合变量名一起使用,指定结构变量或联合变量的一个成员。如果 name 是一个结构变量的名称, member 是该结构模板指定的一个成员名,下面标识了该结构变量的这个成员:
name.member
name.member 的类型就是 member 的类型。联合使用成员运算符的方式与结构相同。
示例:
struct {
int code;
float cost;
} item;
item.code = 1265;
间接成员运算符:
->
一般注释:
该运算符和指向结构或联合的指针一起使用,标识结构变量或联合变量的一个成员。假设 ptrstr 是指向结构的指针, member 是该结构模版指定的一个成员,那么:
ptrstr->member
标识了指向结构的成员。联合使用间接成员运算符的方式与结构相同。
示例 :
struct {
int code;
float cost;
} item, * ptrst;
ptrst = &item;
ptrst->code = 3451;
最后一条语句把一个 int 类型的值赋给 item 的 code 成员。如下3个表达式是等价的:
ptrst->code item.code (*ptrst).code