【问题标题】:Giving unexpected sizeof union output in c program在 c 程序中给出意外的联合输出大小
【发布时间】:2020-02-06 13:34:56
【问题描述】:

代码:

#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 作为输出 在这里它提供了意想不到的输出。

【问题讨论】:

  • 你得到了什么输出,你期望什么输出?请阅读:How to Ask
  • Union element alignment的可能重复
  • @Fredrik 他可能会得到 20 作为输出,因为 int 和 float 的大小可能为 4,并且它正在将其对齐为它的倍数。

标签: c sizeof unions


【解决方案1】:

这是因为填充和对齐。

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

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

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多