12.7 Оператор @ |
Вверх Предыдущий Следующий |
Оператор взятия адреса (@) возвращает адрес переменной, процедуры или функции. Он используется следующим образом: Действие (фактор) взятие адреса Если переключатель $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. |