_________________
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
pointer+offset — Указатель —
pointer-offset — Указатель —
pointer2-pointer1 — Смещение —
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
В этой таблице
Модель памяти, построенная на примере домов ( так эффективно использованная в предыдущей главе ), поможет понять, как работают приведённые в таблице операции с указателями. Представьте себе квартал, в котором все дома пронумерованы по порядку. Дом, следующий за домом 123 Main Street, будет иметь адрес 124 Main Street ( или 122 Main Street, если вы идёте в противоположную сторону, поскольку вы левша или живёте в Англии ).
Очевидно, что в таком случае через четыре дома от моего будет находиться дом с адресом 127 Main Street. Адрес этого дома можно записать как
_________________
117 стр. Глава 9. Второе знакомство с указателями
И наоборот, если поинтересоваться, сколько домов находится между домом 123 и 127, ответом будет четыре:
Понятно, что любой дом находится относительно самого себя на расстоянии нуль домов:
Продолжая рассуждения, становится понятно, что складывать дома 123 и 127 не имеет никакого смысла. Соответственно, суммирование двух указателей является в С++ некорректной операцией. Вы также не можете умножать или делить адреса, возводить их в квадрат или извлекать квадратный корень — словом, надеюсь, вы поняли, что я хотел сказать.
Обратимся к странному и мистическому миру массивов. Ещё раз воспользуемся в качестве примера домами моих соседей. Массив тоже очень похож на городской квартал. Каждый элемент массива выступает в качестве дома в этом квартале. Дома — элементы массива — отсчитываются по порядку от начала квартала. Дом на углу улицы отстоит на 0 домов от угла, следующий дом отстоит на 1 дом от угла и т.д. Пользуясь терминологией массивов, можно сказать, что
Теперь представим себе массив из 32-х однобайтовых значений, имеющий имя
Можно создать указатель
Таблица 9.2. Добавление смещения
_________________
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Как видите, добавление смещения к указателю на массив равнозначно переходу к соответствующему значению.
Таким образом, если