问题描述
问题来了:
我需要知道 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。