开发者社区> 问答> 正文

c 语言中,在struct和union中使用未命名的字段有什么好处?

今天才发现有这种用法参考此处。
比如定义如下结构体:

struct Object {
    enum ObjectType type;
    union{
      int value;
      struct{
         struct Object *header;
         struct Object *tail;
      };
    };
};  
可以这样访问结构成员:
Object obj;
obj.value = ..;
obj.header = ..;
obj.tail = ...;

想请教下,这样定义匿名的字段有什么好处?

展开
收起
a123456678 2016-06-06 11:25:27 2437 0
1 条回答
写回答
取消 提交回答
  • struct Object {
        enum ObjectType type;
        union{
          int value;
          struct{
             struct Object *header;
             struct Object *tail;
          };
        };
    };

    题主应该是在64位机器下测试的,
    enum是用int来表示的,占4字节;
    指针都是8字节;
    union中的变量共享同一块内存,所以这个联合体的大小应该是结构体的两个指针的大小,8*2 = 16字节。
    考虑到内存对齐的因素:
    enum之后应该增加4字节补齐到8字节;
    因此,加上Object结构体的16字节一共是24字节。

    2019-07-17 19:28:00
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载