14.4.5 Параметр- открытый массив |
Вверх Предыдущий Следующий |
Free Pascal поддерживает параметры- открытые массивы, т.е. процедура может быть объявлена с массивом неопределённой длинны в качестве параметра, как и в Delphi. Параметры- открытые массивы будут доступны в процедуре или функции как массив, который объявлен с начальным индексом 0, а индекс последнего элемента High(параметр). Например, объявление параметра Row : Array of Integer; будет эквивалентно Row : Array[0..N-1] of Integer; Где N - фактический размер массива, передаваемый функции. N-1 может быть вычислено как High(Row). Однако, если передается пустой массив, то High(параметр) возвращает -1, а low(параметр) возвращает 0. Параметры- открытые массивы могут быть переданы по значению, по ссылке или в качестве параметра-константы. В последнем случае подпрограмма получает указатель на фактический массив. В первом случае, он получает копию массива. В функцию (или процедуру), открытые массивы могут быть переданы только функциям (или процедурам), которые также объявлены с параметрами- открытыми массивами, а не функциям (или процедурам), у которые параметры- массивы фиксированной длины. Ниже приведен пример функции с использованием открытого массива: Function Average (Row : Array of integer) : Real; Var I : longint; Temp : Real; begin Temp := Row[0]; For I := 1 to High(Row) do Temp := Temp + Row[i]; Average := Temp / (High(Row)+1); end; Начиная с FPC 2.2, можно передавать частичные массивы в функцию, которая требует открытый массив как параметр. Это может быть сделано путем определения диапазона массива, который должен быть передан в открытый массив. Принимая во внимание объявление Var A : Array[1..100]; следующий вызов вычислит и выведет среднее 100 элементов: Writeln('Среднее 100-а элементов: ',Average(A)); А эти вызовы будет вычислять и выводить среднее значение первой и второй половины (массива): Writeln('Среднее первых 50-ти элементов: ',Average(A[1..50])); Writeln('Среднее последних 50-ти элементов: ',Average(A[51..100])); |