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

Значение ссылочной переменной 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, приводит к ошибке. Диагностика в этом случае не всегда выдается.