Указатели в паскале
Различают два типа указателей в Паскал:типизированные
нетипизированные.
Типизированные указатели содержат
адреса, по которым в памяти размещаются данные определенных типов. Используя
эти указатели с данными указанных типов, можно выполнять операции,
предусмотренные базовым типом.
Нетипизированные указатели хранят просто адреса, которые не связаны с данными конкретных типов, т.е. они могут хранить адрес переменной любого типа.
При описании типизированного указателя в Паскале необходимо сообщить компилятору, адреса переменных какого типа он может хранить:
var <имя указателя>: ^ <тип адресуемой переменной>;
Описание нетипизированного указателя в Паскале:
var <имя указателя>: ^ pointer;
Указатель – это переменная, в которую можно записывать адрес другой переменной (или блока памяти).
Объявление:
var pC: ^char; // адрес символаpI: ^integer; // адрес целой переменнойp
R: ^real; // адрес вещ. переменной
s: ^array[1..10] of byte;
p: pointer; // нетипизиров. указатель
Указатели – единственное исключение из общего правила, согласно которому все ресурсы перед использованием должны быть описаны.Для них допускаются описания вида:
Туре рр = ^реrsоn; { тип person еще не определен! }реrsоn = record { определение типа person }
name: string:
next: рр;
end;
Type
{ правильные объявления типов}
P1=^word; { указатель на данные типа word }
P2=^char; { указатель на данные типа char }
P4=array[1..10] of ^real;
{указатель на массив указателей, ссылающихся на данные типа real}Для указателей, которые не хранят никаких адресов, введена константа «нулевой адрес» с именем nil.Константу nil можно присваивать указателю любого типа.
var m: integer; // целая переменная
pI: ^integer; // указатель
A: array[1..2] of integer; // массив
...
pI := @ m; // адрес переменной m
pI := @ A[1]; // адрес элемента массива A[1]
pI := nil; // нулевой адрес