Операции над указателями

Значение ссылочной переменной R можно присваивать другой ссылочной переменной того же типа.

Пример 1. Пусть Q, R: ^point; тогда оператор Q := R; зашлет в Q тот же адрес, что хранится в R.

Рассмотрим действия со ссылочными переменными на следующей схеме. Пусть Q и R указывают на различные компоненты динамических переменных типа C:

C = record
	I: integer;
	P: point
end;

Пусть в памяти машины размещены две цепочки динамических переменных. Выполним четыре различных операций: Q := R; Q^ := R^; Q^.I := R^.I; Q^.P := R^.P;

a) После выполнения оператора Q := R; переменная Q указывает на ту же динамическую переменную, что и R.

б) После выполнения оператора Q^ := R^; (из исходного состояния) получим, что на место указанной переменной “20”, указывающей на “30”, заслана переменная “15”, указывающая на “25”.

в) После выполнения оператора Q^.I := R^.I; из исходного состояния получим, что на место целого значения 20 заслано значение 15; поле указателя не изменилось.

г) После выполнения оператора Q^.P := R^.P; из исходного состояния получим, что на место ссылки на компоненту “30” заслана ссылка на компоненту “25”, поле целого значения не изменилось.

Операции над ссылочными переменными

Ссылочные переменные могут указывать на одну и ту же переменную, т.е. быть равными, как R и Q в случае а).

Ссылочные переменные можно сравнивать посредством операций = и <>. Логическое выражение Q = R имеет значение True для случая a) и значение False для случаев б) и в), т.к. для б) ссылочные переменные Q и R указывают на разные динамические переменные, имеющие, правда, равные значения.

В качестве аналога нуля для ссылочных переменных принято специальное значение Nil: если переменная имеет значение Nil, то это означает, что она не указывает ни на какую переменную. Значение Nil в поле указателя имеет всегда первая компонента цепочки динамических переменных.

Значение nil

Значение Nil можно заслать оператором присваивания: L := nil; если L = nil, то цепочки пуста.

Чтобы определить, что данный элемент является первым в цепочке переменных, достаточно проверить на Nil значение поля указателя этой переменной.

Пример. if L^.P = nil then …

Замечание. Попытка обратиться к указанной переменной с указателем, имеющим значение Nil, приводит к ошибке. Диагностика в этом случае не всегда выдается.

Добавить комментарий