在Delphi中将多维数组作为参数传递

时间:2011-02-03 15:40:55

标签: arrays delphi multidimensional-array

  

可能重复:
  Pass a multidimensional array as a parameter in Delphi

大家好, 同问这里: Pass a multidimensional array as a parameter in Delphi

但需要另一个答案。

type
MultiArray = array of array of Integer;

procedure Foo(a : MultiArray);
begin

end;

procedure Bar(a : array of Integer);
var i : Integer;
begin
  for i in a do WriteLn(IntToStr(i));
end;

const
    a : array[0..2] of Integer = (1, 2, 3);
    ma : array[0..1] of array[0..1] of Integer = ((1,2),(3,4));
begin
    Bar(a);
    Bar([1,2,3]);
    //Foo(ma);
end.

我想将不同大小的数组传递给Foo。如果不可能这样,任何“变通办法”?

2 个答案:

答案 0 :(得分:2)

我不知道你想做什么。你写了

  

我想传递不同的数组   大小到Foo。

那么,你为什么不那样做呢?

如果

type
  TMultiArray = array of array of integer;

procedure Foo(a: TMultiArray);

然后你可以做

var
  ShortMultiArray, LongMultiArray, HugeMultiArray: TMultiArray;

begin
  SetLength(ShortMultiArray, 10, 10);
  SetLength(LongMultiArray, 100, 100);
  SetLength(HugeMultiArray, 1000, 1000);

  Foo(ShortMultiArray);
  Foo(LongMultiArray);
  Foo(HugeMultiArray);
end;

答案 1 :(得分:2)

我猜这个问题是关于多维开放数组的。

Delphi中没有多维打开数组。但是您可以使用动态数组作为元素创建一维开放数组。这是一个例子:

type
  TIntArray = array of Integer;

procedure Test(arr: array of TIntArray);
begin
  ShowMessage(IntToStr(arr[1,1]));
end;

procedure TForm9.Button5Click(Sender: TObject);
begin
  Test([TIntArray.Create(1,2), TIntArray.Create(2,3)]);
end;