Передача массивов в процедуры и функции

При создании функции или процедуры работы с массивами в ее объявление нельзя включать описание индексов.
Пример, объявление procedure MyProc(A: array[1..10] of Integer);
будет расценено как синтаксическая ошибка и вызовет соответствующее сообщение компилятора. Правильным будет объявление
type ta = array[1..10] of Integer; procedure MyProc(A: ta);
Функции и процедуры могут воспринимать в качестве параметров не только массивы фиксированного размера, но и так называемые открытые массивы, размер которых неизвестен. В этом случае в объявлении функции или процедуры они описываются как массивы базовых типов без указания их размерности.
Пример:
procedure SumArray(A:array of integer; var B: array of integer);
При таком определении передаваемый в функцию первый массив будет копироваться и с этой копией - массивом A, будет работать процедура. Второй открытый массив определен как var. Этот массив передается по ссылке, т.е. он не копируется, и процедура будет работать непосредственно с исходным массивом.
Массив, переданный как открытый, воспринимается в теле процедуры или функции как массив с целыми индексами, начинающимися с 0. Размер массива может быть определен функциями Length - число элементов и High - наибольшее значение индекса.
Очевидно, что всегда High = Length - 1.
При вызове функции или процедуры с параметром в виде открытого массива можно использовать в качестве аргумента конструктор открытого массива, который формирует массив непосредственно в операторе вызова. Список элементов такого конструктора массива заключается в квадратные скобки, а значения элементов разделяются запятыми. Например, функцию Sum, суммирующую элементы числового массива, можно вызвать следующим образом:
Sum([1.2,4.45,0.1]);
Пример:
В качестве примера использования открытых массивов рассмотрим процедуру, которая принимает два открытых одинакового размера массива целых чисел, суммирует их и заносит результат во второй из переданных массивов.
procedure SumArray(A:array of integer; var B: array of integer);
var i:word;
begin
for i:=0 to High(A) do B[i]:=A[i]+B[i];
end;
Вызов этой процедуры может иметь вид:
var A1,A2: array [1..3] of integer;
begin
 <операторы заполнения массивов>
SumArray(A1,A2);
end;

Добавить комментарий