12.7 Оператор @

На верх  Назад  Вперёд

Оператор взятия адреса (@) возвращает адрес переменной, процедуры или функции. Он используется следующим образом:


Действие (фактор) взятие адреса

1207


Если переключатель $T включен, оператор @ возвращает типизированный указатель. Если переключатель $T выключен, то оператор взятия адреса возвращает нетипизированный указатель, который является совместим по присваиванию со всеми типами указателями. Указатель типа ^T, где T является переменной на которую ссылается указатель. Следующий пример будет скомпилирован

Program tcast;

{$T-} { @ возвращает нетипизированный указатель}

 

Type

art = Array[1..100] of byte;

Var

Buffer : longint;

PLargeBuffer : ^art;

begin

PLargeBuffer := @Buffer;

end.

Изменение {$T-} на {$T+} изменит поведение компилятора. При компиляции будет ошибка несоответствие типов.

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

Это означает, что следующий код будет работать:

Procedure MyProc;

begin

end;

 

Var

P : PChar;

begin

P:=@MyProc;

end;

Если значение должно быть присвоено переменной процедурного типа, должен быть использован оператор взятия адреса.Такое поведение можно изменить с помощью переключателей -Mtp или -MDelphi, которые делают синтаксис более совместимым с Delphi или Turbo Pascal.