Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在Delphi中将多维数组作为参数传递_Arrays_Delphi_Multidimensional Array - Fatal编程技术网

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

Arrays 在Delphi中将多维数组作为参数传递,arrays,delphi,multidimensional-array,Arrays,Delphi,Multidimensional Array,可能重复: 大家好, 问题与此相同: 但我们需要另一个答案 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

可能重复:

大家好, 问题与此相同:

但我们需要另一个答案

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。如果这种方法不可行,有什么“变通办法”吗?

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

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

那你为什么不那样做呢

如果

那你就可以了

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;

我想问题是关于多维开放数组的

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;

你必须按照唐尼对你的老问题的回答去做。问别人问题的完全重复是情有可原的,但再次问自己的问题是非常糟糕的!我认为,没有看到原来的问题不是我的问题,并且仅仅因为你不知道答案就说没有其他答案是很糟糕的。Serg为我的问题提供了一个完美的解决方案。+1我不知道你可以在动态数组上调用Create@David:我确信该功能存在于Delphi 2007中,可能在早期版本中。@David:它是在Delphi 6或7中添加的(我知道它在7中工作)。在不提前知道将有多少元素的情况下初始化常量数组也是一种巧妙的方法<代码>MyIntArray:=TIntArray.Create(1,2,3,12,23,34,96,57,106)sure beats'const MyIntArray:Integer=(1,2,…)的数组[0..8];`-向第二个示例中添加新条目需要更新数组边界和数组本身,而第一个示例只需要向数组中添加一个元素。@Ken您不需要向我解释这些好处–它们是显而易见的!!!D6中不存在,我只是检查了一下。太糟糕了,你不能将一个开放数组传递给这些构造函数中的一个,这就是我最想使用它的方式。@David:我想我在时间上错了,不过。。。我认为该构造是在D2006或D2007中添加的,而不是D6或7。
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;
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;