Глава 7. Указатели и ссылки__________________________________171

адресами, но не предоставляют для этого такой простой и удобной нотации, как C++.

Указатели являются неотъемлемой частью многих средств программирования, обеспечивая для них краткую и ясную нотацию. Благодаря указателям можно создавать псевдонимы для объектов, дескрипторы функций и функции обратного вызова, с помощью адресной арифметики можно оптимизировать распределение ресурсов (например, оперативной памяти).

Некоторые из этих концепций упоминаются для того, чтобы исподволь подготовить вас к освоению грядущего материала. В основном он будет преподноситься в контексте, невзирая на то, что вы можете сразу его не понять.

Проблемы с массивами

Массивы эффективны и удобны. Массив — это непрерывный блок расположенных подряд данных одинакового типа. Любого элемента массива можно достичь механически, прибавив к адресу массива произведение размера на индекс. К счастью, для этого существует операция массива [], так что всю арифметическую работу выполнит компилятор. Есть два способа создать массив. Первый — это задать массив как статический

type var name[ size ];

а другой — динамически, вызовом new:

type *var name = new type[ size ];

Создать массив очень просто любым из этих способов, и столь же просто с ним манипулировать: с помощью операции массива [ ]. Благодаря этой операции к массивам можно обращаться и как к правосторонним, и как к левосторонним аргументам. Термины правосторонний и левосторонний указывают, с какой стороны операции (например, операции присваивания) массив может находиться. В следующем фрагменте простой символьный массив выступает как в роли правостороннего аргумента (или rvalue), так и в роли левостороннего (или lvalue):

const int МАХ =26;

chsr characters[MAX] ;

for( int j=0; j<MAX; j++)

characters[j] = j + (int)'A'; // заполнить массив 'A'..'Z'

// левостороннее употребление

// напечатать алфавит for( j = МАХ; j>=0; j—) cout « characters[j] « endl; // правосторонний аргумент

Когда массивы используются столь незамысловатым образом, проблемы возникают редко. Однако, когда программа обрастает массивами, увеличи-