Идея состоит в том, что вы указываете на блоки памяти
+----+----+----+----+----+----+
| 06 | 07 | 08 | 09 | 10 | 11 | mem
+----+----+----+----+----+----+
| 18 | 24 | 17 | 53 | -7 | 14 | data
+----+----+----+----+----+----+
Если у вас есть int* p = &(array[5])
, тогда *p
будет 14. Переход p=p-3
сделает *p
равным 17 .
Итак, если у вас есть int* p = &(array[5])
и int *q = &(array[3])
, тогда p-q
должно быть 2, потому что указатели указывают на память, разделяющую 2 блока.
При работе с необработанной памятью (массивы, списки, карты и т. д.) нарисуйте много ящиков! Это действительно помогает!