【问题标题】:Accessing the union members using the name of union使用联合名称访问联合成员
【发布时间】:2014-03-05 06:12:13
【问题描述】:

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

考虑一下代码sn-p:

struct Emp {

  char name[20];
   union address {

     char addr[50];
   };

};

struct Emp e;

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

【问题讨论】:

    标签: c struct unions


    【解决方案1】:

    Unnamed struct/union fields within structs/unions 在 C11 和 GCC 扩展中受支持。如果开启此功能,您可以直接使用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;
    };
    

    【讨论】:

      【解决方案2】:

      给工会成员起个名字:

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

      现在你可以像这样访问它了:

      struct Emp e;
      e.address.addr;
      

      【讨论】:

        【解决方案3】:

        union 应该先命名,然后访问 as

        [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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-12
          • 2021-02-13
          • 2021-10-01
          • 2019-06-28
          • 2023-04-11
          • 2020-02-16
          相关资源
          最近更新 更多