05.09.2016 Views

Стефан Р. - С++ Для чайников

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. Становимся программистами

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!