Одним из наиболее важных моментов использования указателей является распределение динамических переменных в динамически распределяемой области памяти. Borland Pascal предусматривает два способа выделения для указателя памяти: процедура New и процедура GetMem.
Использование New как процедуры
New - это очень простая процедура. После описания перемен- ной-указателя вы можете вызвать процедуру New для выделения пространства в динамически распределяемой памяти для указываемого переменной элемента. Приведем пример:
var IntPointer: ^Integer; StringPointer: ^String;
begin New(IntPointer); { выделяет в динамически распреде- ляемой области два байта } New(StringPointer); { выделяет в динамически распреде- . ляемой области 256 байт } . . end.
Пример 8.2 Распределение динамической переменной с помощью процедуры New.
После вызова процедуры New переменная-указатель указывает на память, выделенную в динамически распределяемой памяти. В данном примере IntPointer указывает на двухбайтовую область, выделенную процедурой New, а IntPointer^ - это допустимая целочисленная пе- ременная (хотя это целочисленное значение еще не определено). Аналогично, StringPointer указывает на выделенный для строки 256-байтовый блок, а его разыменование дает доступную для исполь- зования строковую переменную.
Использование New как функции
Кроме выделения памяти для конкретной динамической перемен- ной вы можете использовать New как функцию, возвращающую указа- тель конкретного типа. Например, если PInteger - это тип, опреде- ленный как ^Integer, а IntPopinter имеет тип PInteger, то следую- щие два оператора эквивалентны:
New(IntPointer); IntPointer := New(PInteger);
Это особенно полезно в случаях, когда может потребоваться присваивать переменной-указателю элементы различных типов. Иногда желательно распределять динамическую переменную, не присваивая явно указатель конкретной переменной. Вероятно, вы можете сделать это только создав для процедуры и функции параметр:
SomeProcedure(New(PointerType));