Чет про программирование / 17) Передача массивов в качестве агрументов функций
.docxПередача массивов в качестве агрументов функций в ЯП Паскаль
При создании функции или процедуры работы с массивами в ее объявление нельзя включать описание индексов. Например, объявление
-
procedure MyProc(A: array[1..10] of Integer);
будет расценено как синтаксическая ошибка и вызовет соответствующее сообщение
компилятора. Правильным будет объявление
-
type ta = array[1..10] of Integer;
procedure MyProc(A: ta);
Функции и процедуры в Object Pascal могут воспринимать в качестве параметров не только массивы фиксированного размера, но и так называемые открытые массивы, размер которых неизвестен. В этом случае в объявлении функции или процедуры они описываются как массивы базовых типов без указания их размерности. Например:
-
procedure SumArray(A:array of integer; var B: array of integer);
При таком определении передаваемый в функцию первый массив будет копироваться и с этой копией - массивом A, будет работать процедура. Второй открытый массив определен как var. Этот массив передается по ссылке, т.е. он не копируется и процедура будет работать непосредственно с исходным массивом.
Массив, переданный как открытый, воспринимается в теле процедуры или функции как массив с целыми индексами, начинающимися с 0. Размер массива может быть определен функциями Length - число элементов и High - наибольшее значение индекса. Очевидно, что всегда High = Length - 1.
Массив в качестве возвращаемого значения функции
type
pp = array of integer;
var
arr: pp;
function f1: pp;
var
a: pp;
begin
SetLength(a, 1);
a[0] := 4;
result := a;
end;
Begin
setlength(arr, 1);
arr := f1();
writeln(arr[0]);
readln;
end.