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