Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Глава 9<br />
Второе знакомство с указателями<br />
В э/ной главе...<br />
•/ Операции с указателями<br />
•/ Объявление и использование массивов указателей<br />
зык C++ позволяет работать с указателями так, как если бы они были переменными<br />
простых типов. (Концепция указателей изложена в главе 8, "Первое<br />
знакомство с указателями в C++".) Однако операции над указателями требуют знания<br />
некоторых тонкостей; именно они и рассматриваются в этой главе.<br />
Опфации с цказсинелями<br />
Некоторые из операций, описанных в главе 3, "Выполнение математических операций",<br />
могут быть применены к указателям. В этом разделе рассматривается применение<br />
арифметических операций при работе с указателями и массивами (с массивами<br />
вы познакомились в главе 7, "Хранение последовательностей в массивах"). В табл. 9.1<br />
приведены базовые операции над указателями.<br />
Таблица 9.1. Три операции над указателями<br />
ОПЕ<strong>Р</strong>АЦИЯ <strong>Р</strong>ЕЗУЛЬТАТ ДЕЙСТВИЕ<br />
pointer+offset Указатель Вычисляет адрес элемента, расположенного через<br />
offset элементов после pointer<br />
pointer-offset Указатель Операция, противоположная сложению<br />
pointer2-pointerl Смещение Вычисляет количество элементов между pointeri<br />
И pointer2<br />
В этой таблице offset имеет тип int (здесь не приведены операции, близкие к сложению<br />
и вычитанию, такие как ++ и +=, которые также могут применяться к указателям).<br />
Модель памяти, построенная на примере домов (так эффективно использованная<br />
в предыдущей главе), поможет понять, как работают приведенные в таблице операции<br />
с указателями. Представьте себе квартал, в котором все дома пронумерованы по порядку.<br />
Дом, следующий за домом 123 Main Street, будет иметь адрес 124 Main Street<br />
(или 122 Main Street, если вы идете в противоположную сторону, поскольку вы левша<br />
или живете в Англии).<br />
Очевидно, что в таком случае через четыре дома от моего будет находиться дом<br />
с адресом 127 Main Street. Адрес этого дома можно записать как<br />
123 Main Street + 4 = 127 Main Street<br />
И наоборот, если поинтересоваться, сколько домов находится между домом 123<br />
и 127, ответом будет четыре:<br />
127 Main Street - 123 Main Street = 4<br />
Понятно, что любой дом отстоит сам от себя на расстояние ноль домов:<br />
123 Main Street - 123 Main Street = О<br />
98 Часть II. Становимся программистами