Pascal/Delphi 动态数组作为参数

Pascal/Delphi dynamic array as argument

我想做这样的事情:

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.

this is 我最接近的

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.

所以我每次调用函数时都必须声明不同的数组吗?请提供一个工作示例。

如果你这样做

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

那你可以写

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

这种数组参数称为open array parameter。如果一个函数有一个开放数组参数,除了这些"literal arrays",你还可以给它动态和静态数组。所以,给定我们的 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将只接受这样的动态数组。