Работа с динамическими величинами связана с использованием еще одного типа данных — ссылочного типа. Величины, имеющие ссылочный тип, называют указателями. Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Указатели — это статические величины, поэтому они требуют описания. Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Для обращения к ссылочной переменной используют запись " A^ ", что означает: "идти по адресу, хранящемуся в A". Память под указатели отводится на этапе компиляции. < указатель > := < ссылочное выражение >;
В качестве ссылочного выражения можно использовать
-указатель;
-ссылочную функцию (т.е. функцию, значением которой является указатель);
- Nil. это зарезервированная константа, обозначающая пустую ссылку, т.е. ссылку, которая ни на что не указывает. Константу Nil можно присваивать указателю с любым базовым типом.
1)Типизированные (пользовательский тип) указатели могут содержать адрес данных строго определенного типа.
TYPE
P=^< базовый тип > (любой тип паскаля) {помещается ^ перед индентификатором соответствующего типа}
Plnt=^integer;
Parr=^array[1..40] of integer;
Var K:plnt; K-адрес целого числа
2) Указатель, не связанный с каким-либо конкретным типом данных, называется нетипизированным указателем. Для описания используется зарезервированное слово Pointer Имя-переменной: pointer; Var Q:pointer; - совместим со всеми пользовательскими типами
SEG(P) вернет сегментную часть адреса, по которому располагается 4-байтный указатель Р, в то время как SEG(P^) - сегмент 6-байтного участка кучи, в котором хранится число 3.14.