&n
принимает адрес n
, который является адресом целого числа.
(char*)(&n)
интерпретирует эту информацию как адрес char
.
*(char*)(&n)
разыменовывает этот адрес, то есть это значение char
, которое живет по этому адресу. Другими словами, это значение первого байта представления целого числа n
.
Теперь вы можете проверить, является ли это 0x01
или 0x67
, чтобы определить, в каком направлении хранится ваше целое число.
В качестве примечания: всегда разрешается переинтерпретировать любой действительный адрес как адрес символа и проверять его, как в C, так и в C ++. Это необходимо всякий раз, когда вы хотите выполнить ввод / вывод, поскольку вы можете вводить / выводить только немые байтовые потоки, которые вы получаете таким образом (то есть вы можете рассматривать любой T x;
как char[sizeof(T)]
и получить к нему доступ через (char*)&x
).