当前位置:嗨网首页>书籍在线阅读

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;
     };
     ...
};

现在,如果 flitscar_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 类型的值赋给 itemcode 成员。如下3个表达式是等价的:

ptrst->code         item.code         (*ptrst).code