Руководство по языку B.Pascal 7




Индексирование символьного указателя


Так как символьный массив с нулевой базой совместим с сим- вольным указателем, символьный указатель можно индексировать ана- логично символьному массиву с нулевой базой.

var A: array[0..63] of Char; P: PChar; Ch: Char; . . . begin P := A; Ch := A[5]; Ch := P[5]; end;

Оба последних присваивания присваивают Ch значение, содержа- щееся в шестом символе-элементе A.

При индексировании символьного указателя индекс задает безз- наковое смещение, которое добавляется к указателю перед его разы- менованием. Таким образом, P[0] эквивалентно P^ и задает символ, на который указывает P. P[1] задает символ справа от того, на ко- торый указывает P, P[2] задает следующий символ и т.д. Для целей индексирования PChar ведет себя таким образом, как если бы он описывался:

type TCharArray = array[0..65535] of Char; Pchar = ^TCharArray;

Компилятор при индексировании символьного указателя не вы- полняет проверку диапазона, так как у него нет информации о типе, по которой можно определить максимальную длину строки с завершаю- щим нулем, на которую указывает символьный указатель.

Показанная ниже функция StrUpper иллюстрирует использование символьного указателя для преобразования строки с завершающим ну- лем в верхний регистр.

function StrUpper(Srt: Pchar): Pchar; var I: Word; begin I := 0; while Str[I] <> #0 do begin Str[I] := UpCase(Str[I]); Inc(I);

end; StrUpper := Str; end;

Обратите внимание, что StrUppper - это функция, а не проце- дура, и что она всегда возвращает значение, которое передавалось ей в качестве параметра. Так как расширенный синтаксис допускает игнорирование результата функции, StrUpper может интерпретиро- ваться, как процедура:

StrUpper(A); PrintStr(A);

Однако, StrUpper всегда возвращает передаваемое ей значение, приведенные выше операторы можно скомбинировать в один:

PrintStr(StrUpper(A));

Вложенные вызовы функций работы со строками с завершающим нулем могут оказаться очень удобными, когда вы хотите указать оп- ределенную взаимосвязь между последовательными операциями со строками.




Содержание  Назад  Вперед