Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 58

Обратите внимание, что я должен создавать новый экземпляр структуры отдельно для каждого элемента массива. Для доступа к членам структур используется оператор косвенного доступа в сочетании с индексным опера­тором.

^Неинициализированные: указатели содержат случайные значения, так же, как и любые другие неинициализированные переменные.- Попытка использовать не­инициализированный указатель может: привести к хаосу в программе. Во многих случаях указатели инициализируются одновременно с их объявлением:

MyArray* array ~ new MyArray;

Иногда, однако, вам нужно будет объявить: указатель : и инициализировать еШэ где-то далее по ходу программы. Если вы попытаетесь использовать этот указа­тель до инициализации, он будет содержать адрес некоторого случайного места в памяти, изменение которого может привести к непредсказуемым проблемам. Зачастую изменение памяти не проявляется ■ немедленно, порождая как бы случайные сбои. Для безопасности вам следует при объявлении инициализиро­вать указатель нулевым значением:

MyArray* array = 0;

При попытке использовать NULL-указатель (это может быть любой указатель, установленный в 0, или NULL), Windows немедленно выдаст сообщение о ■ нарушении прав доступа или общем нарушении защиты. Это не самое приятное, что можно ожидать, но несомненно меньшее из двух зол. Гораздо лучше сразу получить сообщение об ошибке, чем столкнуться затем с проблемами непонят- - ного происхождения.

Разыменование указателей

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

Могу представить, в каком вы сейчас недоумении. Однако все не так уж сложно. В первой строке этого примера объявлена переменная х типа int и ей присвоено значение 20. В следующей строке объявлен указатель на int, которому присвоен адрес переменной х. Это сделано с помощью оператора взятия адреса (&). В данном примере этот оператор сообщает компилятору, что нужно взять адрес переменной х, а не ее значение. После присваивания ptrx содержит адрес, по которому расположена в памяти переменная х. Далее по ходу программы нам нужно получить значение объекта, на который ука­зывает ptrx. Вы могли попробовать сделать так:

Web-дизайн (с) 2010 All rights reserved