Почему выход этой программы равен 4
?
#include <iostream>
int main()
{
short A[] = {1, 2, 3, 4, 5, 6};
std::cout << *(short*)((char*)A + 7) << std::endl;
return 0;
}
С моей точки зрения, в x86 маленькой системе endian, где char имеет 1 байт и короткие 2 байта, вывод должен быть 0x0500
, потому что данные в массиве A
являются паром в шестнадцатеричном виде:
01 00 02 00 03 00 04 00 05 00 06 00
Мы перемещаемся с начала на 7 байт вперед, а затем читаем 2 байта. Что мне не хватает?