Основы программирования. Указатели. Динамические структуры данных. Абстрактные типы данных. Классы - 6 стр.

UptoLike

Составители: 

8
1.2 Неявные указатели
Указатели неявно встречаются во многих конструкциях языка программиро-
вания. Например, при передаче параметра по ссылке в подпрограмму на самом
деле передается указатель. Сравним две реализации одной процедуры:
procedure Mult2(var i: integer);
begin
i:=i*2;
end;
procedure Mult2P(pi: pinteger);
begin
pi^:=pi^*2;
end;
var a: integer;
begin
a:=3;
Mult2(a);
Mult2P(@a);
...
Код, генерируемый для таких процедур, практически идентичен: в обоих случаях
в процедуру
передается адрес переменной, которую следует удвоить. Однако
пользоваться первой версией процедуры с параметром, передаваемым по ссылке,
гораздо удобнее: в теле процедуры не надо разыменовывать указатель и при вы-
зове процедуры в качестве параметра надо указывать саму переменную, а не ее
адрес. Из данного примера видно, что параметр, передаваемый по ссылке, можно
трактовать как указатель, который при использовании неявно разыменовывается.
Другой пример неявных указателейпроцедурные переменные. Процедур-
ная переменная хранит адрес процедуры или функции с соответствующей сигна-
турой, либо же значение nil (напомним, что сигнатура подпрограммы определя-
ется ее заголовком и включает количество и типы ее параметров, а для функций
также и
тип возвращаемого значения). Для присваивания процедурной перемен-
ной a адреса подпрограммы p с соответствующей сигнатурой знак операции @
использовать необязательно: записи a:=@p и a:=p равнозначны. Например:
type proc = procedure (i: integer);
func = function: real;
var a: proc;
b: func;
procedure p(i: integer);
begin
...
end;