union u
{
int a;
float b;
char c[10];
};
int main()
{
union u abc;
printf("\n%d",sizeof(abc));
}
输出:12 我希望输出为10.sizeof(char)为1.所以对于10我希望它是10.有人可以解释我为什么得到12。
答案 0 :(得分:2)
这可能因为float
或int
数据类型之间至少有一个具有4字节对齐要求。因此struct
获得2个字节的填充(以便sizeof(struct u) % 4 == 0
)。
如果您的编译器支持它们以避免填充,您可以使用__attribute__((packed))
或类似的功能,但除非您具有符合的预先存在的数据,否则它不方便。考虑一组打包的struct u
元素将具有未对齐的float
/ int
成员。