Предоставление неожиданного размера вывода объединения в программе c - PullRequest
0 голосов
/ 09 октября 2019

Код :: #include

int main()
{
    union sample
    {
        int   m[2];
        float n[3];
        char ch[18];
    }u;

    printf("The size of union = %d\n", sizeof(u));

    return 0;
}

Я ожидал, что в качестве вывода будет 18 Здесь получен неожиданный вывод.

1 Ответ

0 голосов
/ 11 октября 2019

Это из-за заполнения и выравнивания.

A union может иметь заполнение в конце, чтобы обеспечить правильное выравнивание его полей, когда объединение является частью массива.

Inв этом случае есть поле с массивом типа int и другое с массивом типа float. Эти типы, скорее всего, имеют размер 4 байта, поэтому размер объединения должен быть кратным 4. Поэтому вместо 18 размер будет равен 20, чтобы удовлетворить это выравнивание.

...