Размер массива char внутри объединения не печатается правильно
union u
{
int a;
float b;
char c[10];
};
int main()
{
union u abc;
printf("\n%d",sizeof(abc));
}
Вывод: 12 Я ожидаю, что выход будет 10.sizeof(char) равен 1. Так что для 10 я ожидаю, что это будет 10. Может кто-нибудь объяснить мне, почему мы получаем 12.
1 ответ
Это потому, что, вероятно, по крайней мере один между float
или же int
Тип данных имеет требование выравнивания 4 байта. Итак struct
получает 2 байта заполнения (так что sizeof(struct u) % 4 == 0
).
Ты можешь использовать __attribute__((packed))
или аналогичные функции, если ваш компилятор поддерживает их, чтобы избежать заполнения, но это не удобно, если у вас нет уже существующих данных для соответствия. Подумайте о том, что массив упакован struct u
элементы будут выровнены float
/int
члены.