使用union名称访问union成员

如何访问结构中存在的union成员?

考虑代码段:

struct Emp { char name[20]; union address { char addr[50]; }; }; struct Emp e; 

使用e ,如何在不创建任何联合对象的情况下访问addr类型?

结构/联合中未命名的结构/联合字段在C11和GCC扩展中受支持。 如果启用此function,则可以直接使用e.addr 。 请注意,标记名称也应为空。

 struct Emp { char name[20]; union { char addr[50]; }; }; 

如果不支持,则需要为union提供名称并使用euaddr

 struct Emp { char name[20]; union address { char addr[50]; } u; }; 

给工会成员一个名字:

 struct Emp { char name[20]; union { char addr[50]; } address; }; 

现在您可以像这样访问它:

 struct Emp e; e.address.addr; 

应首先命名联盟,然后访问为

 [struct_object_name].[union_name].[union_datamember] 

这里,

 struct Emp { char name[20]; union { char addr[50]; } Emp_address; }; struct Emp e; 

把它称为

 e.Emp_address.addr