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

Константы ссылочного типа

Описание константы ссылочного типа может содержать только

значение nil (пусто). Приведем несколько примеров:

type

TDirection = (Left, Right, Up, Down);

TStringPtr = ^String;

TNodePtr = ^Node;

TNode = record

Next: NodePtr;

Symbol: StringPtr;

Value: Direction;

end;

const

S1: string[4] = 'DOWN';

S2: string[2] = 'UP';

S3: string[5] = 'RIGHT';

S4: string[4] = 'LEFT';

N1: Node = (Next: nil; Symbol: @S1; Value: Down);

N2: Node = (Next: @N1; Symbol: @S2; Value: Up);

N3: Node = (Next: @N2; Symbol: @S3; Value: Right);

N2: Node = (Next: @N3; Symbol: @S4; Value: Left);

DirectionTable: NodePtr = @N4;

Если разрешен расширенный синтаксис (указана директива ком-

пилятора {$X+}), типизированная константа типа PChar может иници-

ализироваться строковой константой, например:

const

Message: PChar = 'Программа завершена';

Prompt: PChar = 'Введите значения: ';

Digits: array[0..9] of PChar = (

'Ноль', 'Один', 'Два', 'Три', 'Четыре',

'Пять', 'Шесть', 'Семь', 'Восемь', 'Девять');

Результатом будет то, что указатель теперь указывает на об-

ласть памяти, содержащую копию строкового литерала с завершающим

нулем. Подробности вы можете найти в Главе 18 "Строки с завершаю-

щим нулем".

Константы процедурного типа

Константы процедурного типа должны определять идентификатор

процедуры или функции, совместимый по присваиванию с типом конс-

танты.

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

процедурная константа ------T--->¦константа-элемент+----------->

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

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

+--->¦константа-элемент+---+

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

¦ ---- ¦

L--------->¦nil+------------

L----

Приведем следующий пример:

type

ErrorProc = procedure(ErrorCode: Integer);

procedure DefaultError(ErrorCode: Integer); far;

begin

WriteLn('Error ', ErrorCode, '.');

end;

const

ErrorHandler: ErrorProc = DefaultError;

Глава 6. Выражения

Выражения состоят из операций и операндов. Большинство опе-

раций в языке Паскаль являются бинарными, то есть содержат два

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

один операнд. В бинарных операциях используется обычное алгебраи-

ческое представление, например: a+b. В унарных операциях операция

всегда предшествует операнду, например: -b.

В более сложных выражениях порядок, в котором выполняются

операции, соответствует приоритету операций (см. Таблицу 6.1).

Старшинство операций Таблица 6.1

---------------------T---------------------T--------------------

¦ Операция ¦ Приоритет ¦ Вид операции ¦

+--------------------+---------------------+--------------------+

¦ @, not ¦ первый (высший) ¦ унарная операция ¦

+--------------------+---------------------+--------------------+

¦ *, /, div, mod, ¦ второй ¦ операция умножения,¦

¦ and, shl, shr ¦ ¦ деления, сдвига... ¦

+--------------------+---------------------+--------------------+

¦ +, -, or, xor ¦ третий ¦ операция сложения ¦

+--------------------+---------------------+--------------------+

¦ =, <>, <, >, ¦ четвертый (низший) ¦ операция отношения ¦

¦ <=, >=, in ¦ ¦ ¦

L--------------------+---------------------+---------------------

Для определении старшинства операций имеется три основных

правила:

1. Во-первых, операнд, находящийся между двумя операциями с

различными приоритетами, связывается с операцией, имею-

щей более высокий приоритет.

2. Во-вторых, операция, находящаяся между двумя операциями

с равными приоритетами, связывается с той операцией, ко-

торая находится слева от него.

3. В-третьих, выражение, заключенное в скобки, перед выпол-

нением вычисляется, как отдельный операнд.

Операции с равным приоритетом обычно выполняются слева-нап-

раво, хотя иногда компилятор при генерации оптимального кода мо-

жет переупорядочить операнды.

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