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

Будем рассматривать операции как примеры обращения по ссылке к статическим данным:

1. Взятие адреса или операция адресация: для того, чтобы связать ссылочную переменную со значением некоторого элемента памяти необходимо этой переменной присвоить адрес. Для взятие адреса используются операция: @, которая ставится перед переменной, адрес который необходимо получить. Унарная операция.

Пример:

Var

I:integer;

P:^integer;

Begin

……

I:=7;

P:=@i;

В этом случае переменная p будет ссылаться по адресу на область памяти, связанную с переменной i. Для того, чтобы ссылка и указатель ни на что не указывали или присваивается пустое значение,которое обозначается служебном словом Nil: p:Nil. Перед использованием ссылочных переменных и указателей необходимо следить за тем, чтобы они были проинициализированы доступными и логически верными значениями адресов. Неправильная инициализация может привести к непредсказуемым результатам.

2. Разыменование или раз адресация: является основной операцией работы с указателями, суть заключается в том, чтобы взять или поместить некоторое значение по адресу Ю находящихся в ссылочной переменной: ^, который ставиться после ссылочной переменной Пример:

Var

I:integer;

P:^integer;

Begin

……

I:=7;

P:=@i;

P^:=2;

Wrieln(p^);

Writeln(i);

При выполнение операции разыменования важную роль играет базовый тип, он указывает какой объем памяти буде обрабатываться и с каким типом будет работать.

Операция разыменования к указателям типа pointer.

Пример:

Var

I:integer;

P:pointer;

Begin

……

I:=7;

P:=@i;

P^:=2;

Writeln(p^); (x)

Данные операции могут быть выполнены, так как указатель типа pointer не обладает информацией о том, с каким объемом памяти надо работать. Поэтому при использовании типа pointer для обращения к данным необходимо произвести приведение типов, который укажет какой объем данных необходимо обрабатывать

Integer (p^):=2;

Writeln(integer(p^));

При работе с ссылками необходимо ввести четкий контроль за сохранением соответствия базовым типом ссылочной переменной и базовым типом переменной, на данные которые эта ссылка ссылается. Несоответствие типов может привести к нежелательным результатам:

a)

var

I,j,k:byte;

P1,p2:^byte;

Begin

I:=1;j:=2;k:=3;

P1:=@i; p2:=@j;

Writeln (p1^); 1

Writeln(p2^); 2

b) var

I,j,k:byte;

P1,p2:^integer;

Begin

I:=1;j:=2;k:=3;

P1:=@i; p2:=@j;

Writeln (p1^); 513

Writeln(p2^); 770

3. Присваивание ссылочной переменных и указателей.

При выполнение данной операции необходимо чтобы ссылки были совместны по типу. Операция прямого присваивания приводят к копированию адреса из одной ссылочной переменной в другую

Var

I,j:byte;

P1,p2:^byte;

……

P1:=@i;

P2:=@j;

P1:=p2;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: