Расширенный синтаксис Borland Pascal позволяет использовать
для работы с символьными указателями отдельные операции. Для уве-
личения или уменьшения смещения в значении указателя можно ис-
пользовать операции плюс (+) и минус (-). Операцию минус (-) мож-
но использовать для вычисления расстояния (разности смещений)
между двумя символьными указателями. Предположим, что P и Q
представляют собой значения тип PChar, а I - значение типа Word.
Тогда допустимы следующие конструкции:
P + I I прибавляется к смещению P
I + P I прибавляется к смещению P
P - I I вычитается из смещения P
P - Q Смещение Q вычитается из смещения P
В операциях P + I и I + P I прибавляется к адресу, задавае-
мому P. При этом получается указатель, который указывает на I
символов после P. В операции P - I I вычитается из адреса, зада-
ваемого P, и получается указатель, указывающий на I символов до
P.
Операция P - Q вычисляет расстояние между Q (младший адрес)
и P (старший адрес). При этом возвращается результат типа Word,
показывающий число символов между Q и P. Эта операция предполага-
ет, что P и Q указывают на один и тот же массив символов. Если
эти два указателя указывают на разные символьные массивы, то ре-
зультат непредсказуем.
Стандартный синтаксис Borland Pascal позволяет при сравнении
указателей определять только их равенство или неравенство. Расши-
ренный синтаксис (разрешенный по директиве компилятора {$X+})
позволяет применять операции <, >, <= и <= к значениям PChar. За-
метим, однако, что при таких проверках предполагается, что два
сравниваемых указателя указывают на один и тот же массив симво-
лов. По этой причине сравниваются только смещения указателей. Ес-
ли два указателя указывают на различные символьные массивы, то
результат не определен.
var
A, B: array[0..79] of Char;
P, Q: PChar;
begin
P := A; { P указывает на A[0] }
Q := A + 5; { Q указывает на A[5] }
if P < Q then ...; { допустимая проверка,
результат - True }
Q := B; { Q указывает на B[0] }
if P < Q then ...; { результат не определен }
end;
Подробнее об операциях с PChar рассказывается в Главе 6.