Почему печать ch [1] дает 2? - PullRequest
0 голосов
/ 04 июля 2019
#include <stdio.h>

 int main()
 {
    union a
    {
        int i;
        char ch[2];
    };
    union a z = { 512 };
    printf("%d %d %d", z.i, z.ch[0], z.ch[1]);
 }

Вывод:

512 0 2

Почему печать ch[1] дает 2?

Ответы [ 2 ]

1 голос
/ 04 июля 2019

как вы знаете, в объединении все члены начинаются с одного и того же места в памяти. поэтому ch[2] начинается с того же места, что и i. 512 = 0x00000200. Таким образом, в младшем порядке, первый байт 00, а второй 02.

0 голосов
/ 04 июля 2019

Ваш союз имеет 4 байта, и ему назначено 512, что означает, что у вас есть

00:00:00:00-00:00:00:00-00:00:00:10-00:00:00:00

, поскольку 512 - это единица с 9 нулями после него.

Отсюда довольно легкопонять ваши отпечатки.

Как заметил @Some программист, это связано с тем, как двоичные числа выглядят как + endianness.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...