在c程序中给联合输出意外的大小

问题描述 投票:-6回答:1

代码::#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作为输出这里提供了意外的输出。

c union sizeof
1个回答
0
投票

这是由于填充和对齐。

[[union]的末尾可能有填充,以确保在联合是数组的一部分时确保其字段的正确对齐。

在这种情况下,存在一个字段的数组为int,另一个字段的数组为float。这些类型的大小很可能是4个字节,因此联合的大小需要为4的倍数。因此,为了满足对齐要求,联合的大小将由20个而不是18个。]

© www.soinside.com 2019 - 2024. All rights reserved.