Union 的大小以及它返回 24 的原因
Size of Union and why it gives back an 24
问题来了:
我需要知道 union 有多大(或者类似的东西我是 C 的新手,如果我想知道如何学习更多的 C 我会很高兴)
工会应该还我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。
问题来了:
我需要知道 union 有多大(或者类似的东西我是 C 的新手,如果我想知道如何学习更多的 C 我会很高兴)
工会应该还我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。