Объявление и создание динамических структур данных. Указатели

В языке Паскаль имеются средства создания динамических структур данных, которые позволяют изменять количество элементов данных во время выполнения программы, т.е. создавать динамические переменные, размещать их в памяти и уничтожать, когда в них уже нет необходимости.

При объявлении динамической переменной в разделе описаний указывается не сама переменная, а указатель (ссылка) на нее, следующим образом:

<имя указателя>: ^ <тип указателя>;

Такое объявление называется объявлением типизированного указателя.

Например,

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 используется для объявления нетипизированного указателя, который совместим с указателями любого типа.