Типы данных в языке C++__________________________________683

12.7 Указатели

Указатель — это переменная, значение которой равно значению адреса памя-
ти, по которому лежит значение некоторой другой переменной. В этом смысле имя
этой другой переменной отсылает к ее значению прямо, а указатель — косвенно.
Ссылка на значение посредством указателя называется косвенной адресацией.

Указатели, подобно любым другим переменным, перед своим использованием
должны быть объявлены. Объявление указателя имеет вид:

type *ptr;

где type — один из предопределенных или определенных пользователем типов, а
ptr — указатель. Читается это объявление так: «ptr является указателем на значе-
ние типа type».
Например,

int *countPtr, count;

объявляет переменную countPtr типа int * (т.е. указатель на целое число) и пере-
менную count целого типа. Символ * в объявлении относится только к countPtr.
Каждая переменная, объявляемая как указатель, должна иметь перед собой знак
звездочки (*). Если в приведенном примере желательно, чтобы и переменная count
была указателем, надо записать:

int *countPtr, *count;

Символ * в этих записях обозначает операцию косвенной адресации.
Может быть объявлен и указатель на void:

void *Pv;

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

Pv = countPtr;

Хороший стиль программирования ———————————————————————

Хотя это и не обязательно, включайте буквы Ptr или просто Р в имена переменных указате-
лей, чтобы и вам, и тем, кто будет сопровождать вашу программу, было ясно, что эти пере-
менные являются указателями и требуют соответствующей обработки.

В C++Builder указатели используются очень широко. В частности, все компо-
ненты, формы и т.д. объявляются именно как указатели на соответствующий объ-
ект. Посмотрев заголовочный файл любого приложения вы увидите в нем объявле-
ния вида:

TFormI *Forml;

TButton *Buttonl;

Указатели должны инициализироваться либо при своем объявлении, либо с
помощью оператора присваивания. Указатель может получить в качестве началь-
ного значения О, NULL или адрес. Указатель с начальным значением 0 или NULL
ни на что не указывает. NULL — это символическая константа, определенная спе-
циально для цели показать, что данный указатель ни на что не указывает. Пример
объявления указателя с его инициализацией:

int *countPtr = NULL;