Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕКСТЫ для лабработы 3 / вариант №26.rtf
Скачиваний:
21
Добавлен:
02.04.2015
Размер:
330.04 Кб
Скачать

6.9 Показан операнд и типы результата.

адресный коэффициент

│ ┌───┐ ┌──────────────────────┐

└──│ @ ├──┬─────│ ссылка не переменную ├───────────────────────>

└───┘ │ └──────────────────────┘ ^

│ ┌─────────────────────────┐ │

├────>│ идентификатор процедуры ├───────────┤

│ └─────────────────────────┘ │

│ ┌───────────────────────┐ │

├────>│ идентификатор функции ├─────────────┤

│ └───────────────────────┘ │

│ ┌─────────────────────────────────┐ │

└────>│ уточненный идентификатор метода ├───┘

└─────────────────────────────────┘

Операция создания указателя Таблица 6.9

┌────────────┬───────────┬───────────────────────┬──────────────┐

│ Операция │ Действие │ Типы операндов │Тип результата│

├────────────┼───────────┼───────────────────────┼──────────────┤

│ @ │ Получение │ Ссылка на переменную, │ Указатель │

│ │ указателя │ процедуру или иденти- │ (совмести- │

│ │ │ фикатор функции. │ мый с nil) │

└────────────┴───────────┴───────────────────────┴──────────────┘

Операция @ возвращает адрес операнда, то есть строит значе-

ние-указатель, ссылающееся на этот операнд.

B.Pascal 7 & Objects/LR - 110 -

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

─────────────────────────────────────────────────────────────────

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

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

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

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 -

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

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

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

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

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

B.Pascal 7 & Objects/LR - 111 -

Использование операции @

для процедуры или функции или метода

─────────────────────────────────────────────────────────────────

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

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

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

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

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

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

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

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

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

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

─────────────────────────────────────────────────────────────────

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

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

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

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

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

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

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

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

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

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

┌─────────────┐

вызов функции ─┬─>│идентификатор├─┬┬───────────────────────────>

│ │ функции │ ││ ^

│ └─────────────┘ ││ ┌──────────────────┐ │

│ ┌─────────────┐ │└──>│список фактических├──┘

├─>│ десигнатор ├─┤ │ параметров │

│ │ метода │ │ └──────────────────┘

│ └─────────────┘ │

│ ┌─────────────┐ │

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

├─>│ десигнатор ├─┤

│ │ метода │ │

│ └─────────────┘ │

│ ┌─────────────┐ │

└─>│ ссылка на ├─┘

│ переменную │

└─────────────┘

B.Pascal 7 & Objects/LR - 112 -

┌───┐ ┌───────────┐ ┌───┐

список фактических ────>│ ( ├─────>│фактический├──┬─>│ ) ├───>

параметров └───┘ ^ │ параметр │ │ └───┘

│ └───────────┘ │

│ ┌───┐ │

└───┤ , │<────────┘

└───┘

┌────────────┐

фактический параметр ──┬──>│ выражение ├────────>

│ └────────────┘ ^

│ ┌────────────┐ │

└──>│ ссылка на ├───┘

│ переменную │

└────────────┘

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

Sum(A,63)

Maximum(147,J)

Sin(X+Y)

Eof(F)

Соседние файлы в папке ТЕКСТЫ для лабработы 3