Работа с динамической памятью осуществляется с помощью указателей. Указатель – это переменная, в качестве своего значения содержащая адрес ячейки памяти. Указатель занимает 4 байта памяти (2 слова – адрес сегмента и смещение).

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

Чаще всего в Турбо-Паскале указатель связывается с определенным типом данных. В этом случае тип данных называется базовым, а указатель – типизированным. Для объявления типизированного указателя используется значок ^, который должен помещается перед соответствующим типом. Например:

pascal
var
p_int : ^integer;  {указатель на значение типа integer}
p_real : ^real;    {указатель на значение типа real}

Выделение динамической памяти под переменную P происходит при вызове процедуры New(P). При этом размер выделяемого блока соответствует размеру базового типа. Для освобождения памяти, занятой динамической переменной P, используется процедура Dispose(P), при этом значение указателя P остается прежним. Чтобы обнулить освободившийся указатель, ему можно присвоить значение Nil.

pascal
. . .
New(p1);
. . .
Dispose (p1)
p1:=Nil;
. . .

Обращение к переменной базового типа, находящейся в динамической памяти осуществляется по имени указателя со значком ^.

x:=p1^; {переменной x присваивается значение элемента,

на который указывает p1}

p2^:=x; {элементу, на который указывает P2, присваивается

значение переменной x}

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