Для описания указателя используется адресный тип Pointer.
var <имя переменной>: Pointer;
Переменные типа Pointer содержат адрес какого - либо элемента программы и занимают 4 байта, при этом адрес хранится как два слова, одно из них определяет сегмент, второе – смещение относительно начала сегмента.
В данном случае указатель не связывается с каким-либо определенным типом данных. Поэтому указатель называют нетипизированным. С их помощью удобно размещать данные, структура и тип которых меняются в ходе работы программы.
Переменную типа указатель можно описать другим способом, связав ее с некоторым типом данных. В этом случае говорят о типи-зированном указателе.
type <имя типа>= ^<имя базового типа>;
var <имя переменной>: <имя типа>;
Пример
type NameType= ^real;
mas=array [1..10] of byte;
var p1: NameType;
p2: ^integer;
p3: ^mas;
Здесь
p1 - переменная типа указатель, связанная с типом real с помощью имени типа NameType;
p2 – переменная типа указатель, связанная с целочисленным типом;
p3 - переменная типа указатель, связанная с типом Mas.
Необходимо различать переменную типа указатель и переменную, на которую этот указатель ссылается. Например если p3 – ссылка на переменную типа Mas (адрес) , то p3^ - обозначение этой самой переменной.
Для переменных типа указатель введено стандартное значение NIL, которое означает, что указатель не ссылается ни к какому объекту. Константа NIL используется для любых указателей.
Над указателями не определено никаких операций, кроме проверки на равенство и неравенство.
Переменные типа указатель могут быть записаны в левой части оператора присваивания, при этом в правой части может находиться либо функция определения адреса Addr(X), либо выражение @ X, где @ - унарная операция взятия адреса, X - имя переменной любого типа. |