Объявление объединения означает, что всем его членам выделена одна и та же память.Таким образом, ваши int i
и char ch[2]
ссылаются на одно и то же пространство памяти - другими словами, они имеют псевдонимы.Всякий раз, когда вы меняете один, вы также меняете и другой.
Теперь, при условии, что ваши int
32-разрядные, и вы используете систему с прямым порядком байтов, такую как x86, i = 512
(512== 0x00000200) фактически выглядит в памяти следующим образом:
0x00 0x02 0x00 0x00.
с первыми двумя значениями, соответствующими непосредственно 2-символьному массиву:
ch[0] ch[1]
Таким образом, вы получаете ch[0] == 0x0
иch[1] == 0x02
.
Попробуйте установить i = 0x1234
и посмотрите, как это повлияет на ваш массив символов.
Исходя из вашего вопроса, возможно, вы захотите использовать struct
вместо union
- тогда его члены будут выделяться в памяти последовательно (один за другим).