Оператор @ ("at"): Операция с указателем

Язык:
Русский
English

 Оператор @ ("at"): Операция с указателем


 Вы можете создавать указатель на переменную с помощью оператора @.

  Оператор Операция   Тип операндов          Тип результата
  @        Взятие     Ссылка на переменную   Pointer (как и NIL)
           адреса     идентификатор функции
                      или процедуры

"@" является унарным оператором. При использовании оператора "@" с процедурными переменными применяются специальные правила.

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

@ с переменной

Использование @ с обычной переменной не сложно. Например, для следующих объявлений:

 Type TwoChar = Array [0..1] Of Char;
 Var     Int : Integer;
  TwoCharPtr : ^TwoChar;

следующий оператор заставляет указатель TwoCharPtr указывать на Int:

   TwoCharPtr := @Int;

Указатель TwoCharPtr^ становится переобработкой значения Int, как будто это массив [0..1] типа Char.

С параметром

Применение оператора @ к формальному параметру создает указатель на позицию стека, содержащую фактическое значение параметра.

Например, пусть Fred - формальный параметр, передаваемый в процедуру, а FredPtr - указательная переменная.

Если в процедуре выполняется такой оператор

   FredPtr := @Fred;

то FredPtr^ ссылается на значение параметра Fred.

Заметьте, что FredPtr^ не ссылается на саму переменную Fred, а только на значение, которое было получено из переменной Fred и сохранено в стеке.

С переменным параметром

Применение оператора @ к формальному переменному параметру создает указатель на фактический параметр (указатель принимается из стека).

Тип возникающего в результате указателя управляется директивой компилятора $T.

Например, пусть:

 - One - формальный переменный параметр процедуры,
 - Two - переменная, передаваемая в процедуру, как фактический параметр One.
 - OnePtr - указательная переменная.

Если в процедуре выполняется такой оператор

   OnePtr := @One;

то OnePtr указывает на Two, а OnePtr^ - ссылается на значение переменной Two.

С процедурой или функцией

Вы можете применять оператор @ к процедуре или функции, чтобы получить указатель на ее точку входа. Turbo Pascal не дает вам механизм для использования такого указателя.

Единственое применение для указателя на процедуру может состоять в передаче его в ассемблерную подпрограмму или использовании его в операторе InLine.

С методом

Вы можете применять оператор @ к идентификатору метода, чтобы получить указатель на точку входа метода.

См. также

Лекция №10.1: Адреса и указатели. Списочные структуры данных
Лекция №8.5: Процедуры и функции

Код для вставки: :: :: :: ::
Поделиться: // //