C学习杂记(四)sizeof计算联合体大小

#include 

union u1
{
    char a[13];
    int b;
};

int main(void)
{
    printf("%d\n", sizeof(u1));

    return 0;
}

结果为16。

联合体的大小取决于它所有的成员中占用空间最大的一个成员的大小。u2最大的空间是char[13],但是因为另一个成员int b的存在,u2的对齐方式变成4,所以u2的大小必须在4的对齐上占用空间最接近13,即16。

稍微修改代码

#include 

#pragrma pack(2)

union u1
{
    char a[13];
    int b;
};

int main(void)
{
    printf("%d\n", sizeof(u1));

    return 0;
}

结果为14,因为对齐方式改为2了。

你可能感兴趣的:(C)