代码::#include
int main()
{
union sample
{
int m[2];
float n[3];
char ch[18];
}u;
printf("The size of union = %d\n", sizeof(u));
return 0;
}
我原本期望18作为输出这里提供了意外的输出。
这是由于填充和对齐。
[[union
]的末尾可能有填充,以确保在联合是数组的一部分时确保其字段的正确对齐。
在这种情况下,存在一个字段的数组为int
,另一个字段的数组为float
。这些类型的大小很可能是4个字节,因此联合的大小需要为4的倍数。因此,为了满足对齐要求,联合的大小将由20个而不是18个。]