TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

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

Странности

FAQ

Ссылки

Форум

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

Рассылка

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

Об авторе

 

 

Открытые параметры-массивы 

             Формальный параметр, описанный с помощью синтаксиса:

             array of T

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

             arra[0..N - 1] of T

        где  N - число элементов в фактическом  параметре.  По  существу,
        диапазон индекса  фактического  параметра отображается в диапазон
        целых чисел от 0 до N - 1.  Если фактический параметр - это прос-
        тая переменная типа T,  то он интерпретируется как массив с одним
        элементом типа T.

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

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

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

             При применении  к  открытому  параметру-массиву  стандартная
        функция Low возвращает 0, стандартная функция High возвращает ин-
        декс последнего элемента в фактическом параметре-массиве, а функ-
        ция SizeOf возвращает размер фактического параметра-массива.

             Процедура Clear в следующем примере присваивает каждому эле-
        менту массива вещественных значений ноль, а функция Sum вычисляет
        сумму всех элементов массива вещественных чисел. Поскольку в обо-
        их случаях  параметр  A  является  открытым  параметром-массивом,
        подпрограммы могут работать с любым массивом элементов типа Real:

             procedure Clear(var A: array of Real);
             var
               I: Word;
             begin
               for I := 0 to High(A) do A[I] := 0;
             end;

             function Sum(const A: array of Real): Real;
             var
               I: Word;
               S: Real;
             begin
               S := 0;
               for I := 0 to High(A) do S := S + A[I];
               Sum := S;
             end;

             Когда типом элементов открытого  параметра-массива  является
        Char, фактический параметр может быть строковой константой.  Нап-
        ример, с учетом предыдущего описания:

             procedure PringStr(const S: array of Char);
             var
               I: Integer;
             begin
               for I := 0 to High(S) do
                   if S[I] <> #0 then Write(S[I]) else Break;
             end;

        и допустимы следующие операторы процедур:

             PrintStr('Hello word');
             PrintStr('A');

             При передаче  в  качестве открытого параметра-массива пустая
        строка преобразуется в строку с одним элементом,  содержащим сим-
        вол  NULL,  поэтому  оператор  PrintStr('')  идентичен  оператору
        PrintStr('#0').

Содержание

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

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

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

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

Hosted by uCoz