Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Использование операции @ для переменной

Использование операции @ для обычной переменной (не парамет-

ра) не вызывает никаких сложностей. Применение @ к ссылке на пе-

ременную возвращает указатель на переменную. Введем описания:

type

TwoChar = array[0..1] of char;

var

Int: integer;

TwoCharPtr: ^TwoChar;

тогда оператор:

TwoCharPtr := @Int;

приводит к тому, что TwoCharPtr для получения ссылки на

TwoCharPtr^ становится повторной интерпретацией значения Int, как

если бы оно было символьным массивом array[0..1].

Тип получаемого в результате указатель управляется директи-

вой компилятора $T: в состоянии {$T-} (по умолчанию) типом ре-

зультата будет Pointer. Другими словами, результат ом является

нетипизированный указатель, совместимый со всеми другими типами

указателей. В состоянии {$T+} типом результата будет ^T, где T -

тип ссылки на переменную. То есть тип результата будет совместим

со всеми другими указателями на тип этой переменной.

Примечание: К использованию операции @ с процедурным

типом применяются специальные правила. См. ниже раздел

"Процедурный типы в выражениях".

Использование операции @ для процедуры или функции или метода

Вы можете применять операцию @ к процедуре, функции или ме-

тоду. При этом вы получите указатель на точку входа подпрограммы.

Независимо от состояния $T, типом полученного в результате указа-

теля всегда будет Pointer. Другими словами, результатом всегда

является нетипизированный указатель, совместимый со всеми другими

ссылочными типами.

При применении операции @ к методу метод должен задаваться с

помощью уточненного идентификатора (идентификатора объектного ти-

па, за которым следует точка и идентификатор метода).

Вызовы функции

Вызовы функции приводят к активизации функции, заданной с

помощью идентификатора функции. Идентификатором функции является

любой идентификатор, использованный для обозначения функции.

Если в соответствующем описании функции содержится список

формальных параметров то в вызове функции должен содержаться спи-

сок фактических параметров. Каждый параметр подставляется вместо

соответствующего формального параметра в соответствии с набором

правил, который вводится в Главе 9 ("Процедуры и функции").

Примечание: См. выше разделы "Активизация методов",

"Активизация уточненных методов" и "Процедурные типы".

--------------

вызов функции -T->¦идентификатор+-TT--------------------------->

¦ ¦ функции ¦ ¦¦ ^

¦ L-------------- ¦¦ ------------------- ¦

¦ -------------- ¦L-->¦список фактических+---

+->¦ десигнатор +-+ ¦ параметров ¦

¦ ¦ метода ¦ ¦ L-------------------

¦ L-------------- ¦

¦ -------------- ¦

¦ ¦ уточненный ¦ ¦

+->¦ десигнатор +-+

¦ ¦ метода ¦ ¦

¦ L-------------- ¦

¦ -------------- ¦

L->¦ ссылка на +--

¦ переменную ¦

L--------------

---- ------------ ----

список фактических ---->¦ ( +----->¦фактический+--T->¦ ) +--->

параметров L---- ^ ¦ параметр ¦ ¦ L----

¦ L------------ ¦

¦ ---- ¦

L---+ , ¦<---------

L----

-------------

фактический параметр --T-->¦ выражение +-------->

¦ L------------- ^

¦ ------------- ¦

L-->¦ ссылка на +----

¦ переменную ¦

L-------------

Приведем некоторые примеры вызовов функций:

Sum(A,63)

Maximum(147,J)

Sin(X+Y)

Eof(F)

Volume(Radius, Height)

В режиме расширенного синтаксиса ($X+) вызовы функций можно

использовать в качестве операторов, то есть результат вызова

функции может отбрасываться.

Соседние файлы в предмете Программирование на Pascal