Ну, это зависит от того, что вы имеете в виду.
Если вы имеете в виду:
Будут ли оба члена союза int
и char[4]
правильно выровнены, чтобы я мог использовать их независимо друг от друга?
Тогда да. Если вы имеете в виду:
Будут ли гарантированно выровнены элементы int
и char[4]
, чтобы они занимали одинаковое пространство, чтобы я мог получить доступ к отдельным байтам int
через char[4]
?
Тогда нет. Это потому, что sizeof(int)
не гарантируется равным 4. Если int
s - 2 байта, то кто знает, какие два char
элемента будут соответствовать int
в вашем union
(стандарт не определяет )
Если вы хотите использовать объединение для доступа к отдельным байтам int
, используйте это:
union {
int i;
char c[sizeof(int)];
};
Поскольку каждый элемент имеет одинаковый размер, они гарантированно занимают одинаковое пространство. Об этом, я полагаю, вы хотите знать, и я надеюсь, что я ответил на него.