Глава 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; // правосторонний аргумент
Когда массивы используются столь незамысловатым образом, проблемы возникают редко. Однако, когда программа обрастает массивами, увеличи-