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

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

阅读 9.8k
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字节。

题主的问题是使用匿名的字段有什么好处,我觉得可能在初始化的时候更加方便吧。
参考下这篇文章:
http://blog.csdn.net/npy_lp/article/details/7038214

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进