Указатели
Обычно
переменная хранит некоторые данные. Однако помимо обычных, существуют
переменные, которые ссылаются на другие переменные. Такие переменные называются
указателями. Указатель — это переменная, значением которой является адрес другой
переменной или структуры данных. Графически указатель может быть изображен так,
как на рис. 8.5.
Рис.
8.5.
Переменная-указатель
Указатель,
как и любая другая переменная программы, должен быть объявлен в разделе
объявления переменных. В общем виде объявление указателя выглядит следующим
образом:
Имя: ^ Тил;
где:
значок ^
показывает, что объявляемая переменная является указателем.
Приведем
примеры объявления указателей:
p1: ^integer; р2: ^real;
В
приведенном примере переменная p1 — это указатель на переменную типа integer, a
p2 — указатель на переменную типа real.
Тип
переменной, на которую ссылается указатель, называют типом указателя. Например,
если в программе объявлен указатель р: ^integer, то говорят: ^р — указатель
целого типа" или "р — это указатель на целое".
В начале
работы программы переменная-указатель "ни на что не указывает". В этом случае
говорят, что значение указателя равно NIL. Зарезервированное слово NIL
соответствует значению указателя, который ни на что не указывает.
Идентификатор NIL можно использовать в инструкциях присваивания и в условиях.
Например, если переменные pi и р2 объявлены как указатели, то инструкция
p1 := NIL;
устанавливает значение переменной, а инструкция if р2 = NIL
then
ShowMessage('Указатель р2 не инициализирован!');
проверяет,
инициализирован ли указатель р2.
Указателю
можно присвоить значение — адрес переменной соответствующего типа (в тексте
программы адрес переменной — это имя переменной, перед которым стоит оператор
@). Ниже приведена инструкция, после выполнения которой переменная р будет
содержать адрес переменной п.
р := @n;
Помимо
адреса переменной, указателю можно присвоить значение другого указателя при
условии, что они являются указателями на переменную одного типа. Например, если
переменные pi и р2 являются указателями типа integer, то в результате выполнения
инструкции
p2 := p1;
переменные
pi и р2 указывают на одну и ту же переменную.
Указатель
можно использовать для доступа к переменной, адрес которой содержит указатель.
Например, если р указывает на переменную 1, то в результате выполнения
инструкции
р^ : = 5;
значение
переменной i будет равно пяти. В приведенном примере значок ^
показывает, что значение пять присваивается переменной, на которую указывает
переменная-указатель.