13 октября 2011 г.

Строки. PChar и PAnsiChar

Строки… Как много в этом слове собралось…
Очень часто нам приходится работать со строками, ни одна программа не обходится без этого. А уж если со строками работа ведется активно, то начинаются танцы с бубном в целях оптимизации работы программы.
Указатели — одна из вех в достижении оптимальной обработки строковых данных. В эпоху однобайтовых строчек в Delphi позволялись вольности в работе с указателями. Теперь же, когда типов строк стало много, возникли сложности. Уже не напишешь
pStr + 1
для получения указателя на следующий символ, приходится брать во внимание тип строки.
Есть такой вариант:
pStr + SizeOf(Char)
или
pStr + SizeOf(AnsiChar)
в зависимости от типа указателя.
Есть универсальный вариант:
pStr + N * SizeOf(pStr^)

Однако в Delphi есть замечательные системные фунции для простого получения указателя. Это Inc и Dec. Компилятор самостоятельно разберется с типом указателя и точнёхонько переместит указатель на заданное количество символов:
Inc(pStr, N)
Dec(pStr, N)
Надо учесть, что эти функции изменяют значение параметра pStr. Если необходимо его сохранить, то вводится дополнительная переменная. Если необходимо получить указатель на следующий символ, то на помощь придёт функция StrNextChar, которая так же умеет принимать параметр указателя любого типа:
StrNextChar(pStr)
К сожалению, нет функции для движения в обратном направлении и получения указателя через произвольное количество символов. Однако на основании изложенного материала реализовать такие функции самостоятельно не составит труда.

Комментариев нет:

Отправить комментарий