Паскаль / Delphi Dynami c массив в качестве аргумента - PullRequest
3 голосов
/ 04 апреля 2020

Я хотел бы сделать что-то вроде этого:

procedure show(a : Array of Integer);
var
  i : integer;
begin
  for i in a do
    writeln(i);
end;
begin
  show((1, 2));
  show((3, 2, 5));
end.

но это ближайший я получил

Program arrayParameter(output);
type
  TMyArray = Array[0..2] of Integer;
var
  arr : TMyArray = (1, 2, 3);
procedure show(a : TMyArray);
var
  i : integer;
begin
  for i in a do
    writeln(i);
end;
begin
  show(arr);
end.

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

1 Ответ

4 голосов
/ 04 апреля 2020

Если вы сделаете

procedure show(a: array of Integer);
var
  i: Integer;
begin
  for i in a do
    Writeln(i);
end;

, вы можете написать

show([1, 2, 3, 4]);

Этот тип параметра массива называется параметром открытого массива . Если у функции есть параметр открытого массива, вы можете дать ей как динамические c, так и массивы stati c, в дополнение к этим "буквальным массивам". Итак, учитывая нашу show процедуру, мы можем также сделать

var
  DynArr: TArray<Integer>; // = array of Integer
  StaticArr: array[0..2] of Integer;

begin
  show(DynArr);
  show(StaticArr);
end;

Просто для сравнения: если вы вместо этого выполните

procedure show(a: TArray<Integer>);

или имеет

type
  TDynIntArray = array of Integer;

и сделайте

procedure show(a: TDynIntArray);

, тогда show примет только такие динамические c массивы.

...