В языке Паскаль имеются средства создания динамических структур данных, которые позволяют изменять количество элементов данных во время выполнения программы, т.е. создавать динамические переменные, размещать их в памяти и уничтожать, когда в них уже нет необходимости.
При объявлении динамической переменной в разделе описаний указывается не сама переменная, а указатель (ссылка) на нее, следующим образом:
<имя указателя>: ^ <тип указателя>;
Такое объявление называется объявлением типизированного указателя.
Например,
Var P: ^ char; {указатель на переменную типа char }
Указатель – это переменная, значением которой является адрес другой переменной заданного в объявлении указателя типа.
Рассмотрим пример использования указателя типа char. Указатель объявляется с помощью операции разыменования (^). Использование имени указателя в программе означает обращение к адресу ячейки памяти. Чтобы обратиться к содержимому ячейки, на которую ссылается указатель, требуется после имени указателя поставить символ ‘^’.
P^ - содержимое ячейки, адрес которой является значением указателя P.
P: ^ char P^
Адрес ‘*’
Выделение и освобождение памяти под динамические переменные выполняются стандартными процедурами New, Dispose, GetMem, FreeMem, Mark и Release, соответственно, где
· Procedure New(Var p: pointer); размещает динамическую переменную и возвращает ее адрес как значение указателя p;
· Procedure Dispose(Var p: pointer); уничтожает динамическую переменную;
· Procedure GetMem(Var p: pointer; Size: word); размещает динамическую переменную указанного размера и возвращает ее адрес как значение указателя p;
· Procedure FreeMem(Var p: pointer; Size: word); уничтожает динамическую переменную указанного размера;
· Procedure Mark(Var p: pointer); размещает динамическую переменную и возвращает ее адрес как значение указателя p; эта переменная уничтожается с помощью процедуры Release;
· Procedure Release(Var p); уничтожает динамическую переменную указанного размера.
Описатель pointer используется для объявления нетипизированного указателя, который совместим с указателями любого типа.