Основы программирования на C++, PASCAL
Во время компиляции память выделяется только под статические величины. Указатели — это статические величины, поэтому они требуют описания.
Каким же образом происходит выделение памяти под динамическую величину? Память под динамическую величину, связанную с указателем, выделяется в результате выполнения стандартной процедуры NEW. Формат обращения к этой процедуре выглядит так:
NEW(<указатель>);
Считается, что после выполнения этого оператора создана динамическая величина, имя которой имеет следующий вид:
<имя динамической величины>::=<указатель>^.
Пусть в программе, в которой имеется приведенное выше описание, присутствуют операторы
NEW(Pl); NEW(P2); NEW(PM);
После их выполнения в динамической памяти оказывается выделенным место под три величины (две скалярные и один массив), которые имеют идентификаторы
P1^, Р2^, РМ^
Например, обозначение P1^ можно расшифровать так: динамическая переменная, на которую ссылается указатель Р1.
На схеме, представленной на рис. 39, показана связь между динамическими величинами и их указателями.
Дальнейшая работа с динамическими переменными происходит точно так же, как со статическими переменными соответствующих типов. Им можно присваивать значения, их можно использовать в качестве операндов в выражениях, параметров подпрограмм и т.п. Например, если переменной Р1^ нужно присвоить значение 25, переменной P2^ присвоить значение символа 'W', a массив PM^ заполнить по порядку целыми числами от 1 до 100, то это делается так:
Р1^:=25;
Р2^: ='W';
For I:=l То 100 Do PM^ [I]:=I;
Кроме процедуры NEW значение указателя может определяться оператором присваивания:
<указатель>:=<ссылочное выражение>;
В качестве ссылочного выражения можно использовать:
• указатель;
• ссылочную функцию (т. е. функцию, значением которой является указатель);
• константу Nil.
Nil — это зарезервированная константа, обозначающая пустую ссылку, т. е. ссылку, которая ни на что не указывает. При присваивании базовые типы указателя и ссылочного выражения должны быть одинаковыми. Константу Nil можно присваивать указателю с любым базовым типом.
До присваивания значения ссылочной переменной (с помощью оператора присваивания или процедуры NEW) она является неопределенной.