New(b);
WriteLn(a^, ‘ ‘, b^);
Определены адреса a и b динамических переменных a^ и b^, но сами их значения пока не заданы, поэтому на экран будут выведены значения, оставшиеся в ячейках памяти с указанными адресами после решения предыдущей задачи.
a^ := 3;
b^ := 5;
WriteLn(a^, ‘ ‘, b^);
Обычное присваивание значений переменным: динамической переменной a^ присвоено значение 3, а динамической переменной b^ - значение 5. Эти же значения и выводятся на экран.
a := b;
WriteLn(a^, ‘ ‘, b^);
Указателю a присвоено новое значение – значение адреса ячейки памяти, хранившееся в указателе b. Поэтому сейчас оба указателя хранят один и тот же адрес – адрес b. Они указывают на одну и ту же динамическую переменную b^. Адрес же динамической переменной a^ утерян, поэтому ее значение становится недоступным. Значит, на экран будут выведены два одинаковых числа, являющиеся текущими значениями переменных a^ и b^: 5 и 5.
b := Nil;
WriteLn(a^, ‘ ‘, b^);
Указатель b принимает значение пустой ссылки Nil – он перестает указывать на какую-нибудь динамическую переменную b^, поэтому нельзя выводить на экран ее значение.
Таким образом, использование динамических переменных отличается следующим:
1. вместо описания самих динамических переменных в программе дается описание ссылок на них (статических переменных ссылочного типа), поставленных в соответствие одноименным динамическим переменным,
2. до своего использования каждая динамическая переменная должна быть порождена с помощью оператора New,
3. значение динамической переменной задается с помощью переменной с указателем,
4. к переменной с указателем можно применять все те операции, которые допустимы и для статической переменной того же типа.
Над значениями переменных ссылочного типа – адресами динамических переменных – в Паскале кроме операции присваивания определены две операции сравнения: = и <>.
Два значения ссылочного типа равны между собой, если они оба равны Nil, либо указывают на один и тот же динамический объект (ячейку памяти). Во всех остальных случаях имеет место неравенство.
Если в процессе выполнения программы динамический объект, созданный оператором, например New(a), становится ненужным, то его можно уничтожить оператором Dispose(a). При этом динамический объект, на который указывает ссылочная переменная a , уничтожается, занимаемое им место в памяти освобождается, а значение переменной a становится неопределенным. Оператор Dispose уничтожает только сам динамический объект, но не указатель на него:
New(a);
Дата добавления: 2015-08-08; просмотров: 496;