首页 > 解决方案 > 为什么我在 C 编程中得到错误的 Union 大小?

问题描述

我想检查变量arr的大小。我的问题是为什么我得到arr 56 而不是 50 的大小。因为据我所知,union 分配了 union 中声明的最高数据类型的内存。在工会中,学生 char name[50] 的大小最大。

#include <stdio.h>
#include <string.h>
union student
{
    int roll;
    double marks;
    char name[50];
};
int main()
{
    union student arr;
    printf("%d",sizeof(arr));

return 0;
}

标签: cdoubleunionsizeofmemory-alignment

解决方案


这是由于与双精度的对齐。:)sizeof( double )等于 8。56 可被 8 整除。因此,例如,如果您有一个单元类型的对象数组,则存储的双精度将正确对齐。


推荐阅读