Если вы сделаете
int* ptr;
printf("%#x\n%#x\n%#x\n", ptr, ptr+1, ptr+2);
Компилятор говорит: «Эй, ptr
указывает на некоторое значение int
, и программист хочет, чтобы int
s со смещением 1 или 2 дюйма.Итак, я получаю sizeof(int)
(что на многих архитектурах, включая вашу, 4 байта) и добавляю его к значению ptr
".Таким образом, выходные данные будут смещены на 4 байта.
Расположение в памяти:
ptr --+
|
v
+---------+---------+---------+
| int | int | int |
+---------+---------+---------+
4 bytes 4 bytes 4 bytes
При выполнении
unsigned int* ptr;
printf("%#x\n%#x\n%#x\n", ptr, ptr+1, ptr+2);
Компилятор говорит: «Эй, ptr
указывает на некоторый unsigned int
, и программистхочет unsigned int
s со смещением 1 или 2 дюйма. Итак, я получаю sizeof(unsigned int)
(что на многих архитектурах, включая вашу, 2 байта) и добавляю его к значению ptr
".Таким образом, выходные данные будут смещены на 2 байта.
Расположение в памяти:
ptr --+
|
v
+---------+---------+---------+
|unsigned | unsigned|unsigned |
+---------+---------+---------+
2 bytes 2 bytes 2 bytes