如何解决Union 的大小以及为什么它返回 24
问题来了:
我需要知道 union 有多大(或者类似的东西,我是 C 的新手,如果我想知道如何学习更多的 C,我会很棒)
Union 应该给我回 20 吗?
它给了我 24,我需要一个解释。
#include <stdio.h>
#include <stdlib.h>
union Zadanie {
int calkowita;
char znak[20];
double rzeczywista;
}ZadanieU;
typedef struct {
int calkowita;
char znak[20];
double rzeczywista;
}ZadanieS;
int main()
{
ZadanieS z1 = {2,"Borys",3.5};
printf("%d,\n %s,\n%0.1f \n\n",z1.calkowita,z1.znak,z1.rzeczywista);
printf("Rozmiar unii: %d\n",sizeof(ZadanieU));
printf("Rozmiar Struktury: %d\n\n",sizeof(ZadanieS));
printf("Rozmiar unii Calkowitej:%d \n",sizeof(ZadanieU.calkowita));
printf("Rozmiar Struktury Calkowitej: %d\n\n",sizeof(z1.calkowita));
printf("Rozmiar unii Char:%d \n",sizeof(ZadanieU.znak));
printf("Rozmiar Struktury Char: %d\n\n",sizeof(z1.znak));
printf("Rozmiar unii Rzeczywistej:%d \n",sizeof(ZadanieU.rzeczywista));
printf("Rozmiar Struktury Rzeczywistej: %d\n\n",sizeof(z1.rzeczywista));
return 0;
}
解决方法
sizeof(ZadanieU)
将告诉您该类型数组中该联合的两个连续实例的地址之间的差异。
在某些架构上,double
值在 8 字节边界上对齐,并且联合包含一个双精度值,因此它也会在 8 字节边界上对齐。
因此,连续联合地址之间的差值为 24。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。