Операции с символьными указателями
Расширенный синтаксис 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.