{
char flag[3];
short value;
} sampleStruct;
union
{
char flag[3];
short value;
} sampleUnion;
假设 sizeof(char)=1,sizeof(short)=2, 那么sizeof(sampleStruct) =1, sizeof(sampleUnion) =2
short类型占2字节, 必须从2字节倍数地址开始
int类型占4字节,必须从4字节倍数地址开始
0000 a[0]
0001 a[1]
0002 a[2]
0003 空一个字节
0004 b 这个是2倍数的地址
0005
联合体则是重叠式,各成员共享一段内存,所以整个联合体的sizeof也就是每个成员sizeof的最大值。
输出结果是:6,4
字符类型占1字节, 可以从任何地址开始
short类型占2字节, 必须从2字节倍数地址开始
int类型占4字节,必须从4字节倍数地址开始
0000 a[0]
0001 a[1]
0002 a[2]
0003 空一个字节
0004 b 这个是2倍数的地址
0005
结构体在内存组织上是顺序式的,联合体则是重叠式,各成员共享一段内存,所以整个联合体的sizeof也就是每个成员sizeof的最大值。