TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

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

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

             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));

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

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz