union中的sizeof char数组无法正确打印

时间:2017-04-14 17:01:15

标签: c sizeof unions

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。

1 个答案:

答案 0 :(得分:2)

这可能因为floatint数据类型之间至少有一个具有4字节对齐要求。因此struct获得2个字节的填充(以便sizeof(struct u) % 4 == 0)。

如果您的编译器支持它们以避免填充,您可以使用__attribute__((packed))或类似的功能,但除非您具有符合的预先存在的数据,否则它不方便。考虑一组打包的struct u元素将具有未对齐的float / int成员。