使用union名称访问union成员

时间:2014-03-05 06:12:13

标签: c struct unions

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

考虑代码段:

struct Emp {

  char name[20];
   union address {

     char addr[50];
   };

};

struct Emp e;

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

3 个答案:

答案 0 :(得分:3)

C11和GCC扩展支持

Unnamed struct/union fields within structs/unions。如果启用此功能,您可以直接使用e.addr。请注意,标记名称也应为空。

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

如果不支持,则需要为union提供一个名称并使用e.u.addr

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

答案 1 :(得分:1)

给工会成员一个名字:

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

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

struct Emp e;
e.address.addr;

答案 2 :(得分:0)

首先应该将Union命名,然后以

进行访问
[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