首页 > 解决方案 > 在 c 程序中给出意外的联合输出大小

问题描述

代码:

#include <stdio.h> 

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

标签: csizeofunions

解决方案


这是因为填充和对齐。

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

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


推荐阅读