@vasilyev Предположим, что переменная x лежит в памяти по адресу 0x400000 (если быть точным, то в адресах 0x400000 - 0x400003). Операция &x даст число 0x400000 типа unsigned int *. После этого идёт преобразование этого типа в unsigned char *. Указатель на переменную x выходит такой, как если бы она была типа unsigned char. После этого разыменовывается указатель. Получается значение типа unsigned char по адресу 0x400000. То есть первый байт переменной x. Если процессор little endian и int 32-битный, то в памяти значения лежат так: 0x01, 0x00, 0x00, 0x00. Соответственно, по адресу первого байта находится значение 0x01. Если big endian, то вот так: 0x00, 0x00, 0x00, 0x01. И в первом байте находится 0x00. Вообще, этот код был бы намного понятнее, если бы там применялся union с двумя значениями типа unsigned int и unsigned char. В первое значение кладётся 1, а из второго получается значение. Все значения union лежат в одних адресах памяти, поэтому суть подхода не изменится.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.