C中的结构和联合,确定大小和访问成员

nam*_*ked 3 c structure unions

所有,

这是一个关于联盟的例子,我觉得这很令人困惑.

struct s1
{
    int a;
    char b;
    union
    {
       struct
       {
          char *c;
          long d;
       }
       long e;
     }var;
};
Run Code Online (Sandbox Code Playgroud)

考虑到char1个字节,int是2个字节,long是4个字节.这里整个结构的大小是多少?联合大小是{size of char*} + {size of double}?我很困惑,因为结合包裹在结合中.

另外,我如何访问dstruct中的变量. var.d

Mat*_*hen 5

由于填充,大小是实现定义的.联合将至少是最大成员的大小,而结构将至少是成员大小的总和.内部结构至少是 sizeof(char *) to sizeof(long),所以联合将至少是那么大.外部结构至少是sizeof(int) + 1 + sizeof(char *) + sizeof(long).所有结构和联合都可以填充.

您正在使用标准的未命名字段的扩展名.在ISO C中,无法访问内部结构.但是在GCC(我相信MSVC),你可以做到var.d.

此外,您在内部结构后缺少分号.