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。