Для работы с динамической памятью необходимо использовать указатели.
Указатель – это переменная, которая в качестве своего значения содержит адрес байта памяти.
Для хранения значения указателя в оперативной памяти используются 4 байта, которые представляют собой сегмент (2 байта) и смещение (2 байта).
Различают два вида указателей:
ü типизированные;
ü нетипизированные.
Типизированные указатели
Тип данных «Типизированный указатель» задает множество значений, которые соответствуют адресам переменных определенного типа данных.
Объявление переменных-указателей:
Имя указателя : ^ имя типа данных;
Например,
Type
TPoint = record
x, y, z : Real;
end;
Var
P1 : ^Integer;{указатель на целое число}
P2 : ^Real;{указатель на вещественное число}
P3 : ^Char;{указатель на символ}
P4 : ^TPoint;{указатель на точку в пространстве}
Нетипизированные указатели
Тип данных Pointer служит для объявления нетипизированных указателей, т.е. указателей, несвязанных с конкретным типом.
Var
P : Pointer;{нетипизированный указатель}
2.3 Состояния указателя:
ü
неопределенное (после объявления указателя);
ü
определенное (содержит адрес переменной);
ü никуда не указывает (указатель равен значению nil).
2.4 Операция присваивания указателей:
ü разрешается использовать оператор присваивания, в котором в левой части – нетипизированный указатель, а в правой части – типизированный указатель;
ü в операторе присваивания типы указателей должны совпадать.
Например.
Var
p1, p2 : ^Real;
p3 : ^Integer;
p : Pointer;
Begin
…
p1 := p2; {real = real}
p1 := p3; {real = integer}
p := p1; {pointer = real}
p3 := p; {real = pointer}
…
End.