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