TURBO PASCAL |
Новости
|
Индексирование символьного указателяТак как символьный массив с нулевой базой совместим с сим- вольным указателем, символьный указатель можно индексировать ана- логично символьному массиву с нулевой базой. 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); B.Pascal 7 & Objects/LR - 304 - end; StrUpper := Str; end; Обратите внимание, что StrUppper - это функция, а не проце- дура, и что она всегда возвращает значение, которое передавалось ей в качестве параметра. Так как расширенный синтаксис допускает игнорирование результата функции, StrUpper может интерпретиро- ваться, как процедура: StrUpper(A); PrintStr(A); Однако, StrUpper всегда возвращает передаваемое ей значение, приведенные выше операторы можно скомбинировать в один: PrintStr(StrUpper(A)); Вложенные вызовы функций работы со строками с завершающим нулем могут оказаться очень удобными, когда вы хотите указать оп- ределенную взаимосвязь между последовательными операциями со строками. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |