Массив символов, например char ch[2]
, представляет собой массив размером 2 char
с, каждый длиной 1 байт. Это означает, что в памяти это char
, а затем секунда char
.
. Это объединение содержит 2 типа, 32-разрядное (на моей машине) целое число и массив из 2 символов. Поскольку самый большой тип 32-битный или 4 байта, общий размер объединения составляет 4 байта. Вы можете проверить это с помощью printf("%d\r\n", sizeof(u1));
ui1.ch[0] = 3
, для которого первый байт равен 3, а u1.ch[1] = 1
для второго байта, равного 1. Когда я просматриваю это в отладчике, я вижу 0x60fefc: 03 01 00 00
. То есть, в ячейке памяти, соответствующей u1
, есть байты 3, 1, 0 и 0. u1.i
интерпретирует это как 4-байтовое целое в порядке наименьшего значащего байта (LSB). 4-байтовое целое число в формате LSB представляется в памяти в формате A B C D
, где значение равно A + 256*B + 65536*C + 16777216*D
(для положительных значений до 2 147 483 647). Итак, 03 01 00 00
равно 3 + 256*1
, что равно 259.