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

时间:2009-11-22 22:03:31

标签: delphi arrays parameters multidimensional-array

我想将多维数组传递给构造函数,如下所示:

constructor TMyClass.Create(MyParameter: array of array of Integer);
begin
  LocalField := MyParameter;
end;

其中LocalField是一个Integer数组的数组。

但是上面的代码不会编译('预期标识符但发现ARRAY')。有人可以向我解释为什么这是错的吗?我试着阅读开放的,静态的和动态的数组,但还没有找到有用的东西。有没有办法在不改变LocalField类型的情况下修复它?

4 个答案:

答案 0 :(得分:14)

为localfield创建一个特定类型,然后将其设置为MyParameter的类型,类似于:

type
  TTheArray = array[1..5] of array[1..10] of Integer;

var
  LocalField: TTheArray;

constructor TMyClass.Create(MyParameter: TTheArray);
...

(注意:未在编译器中验证,可能存在轻微错误)

请注意,大多数情况下,类似pascal的语法中,多维数组更适合声明为

type
  TTheArray = array[1..5, 1..10] of Integer;

当然,除非你有其他理由这样做。

答案 1 :(得分:1)

我手头没有德尔福,但我认为这应该有效:

type
  TIntArray = array of Integer;

...

constructor TMyClass.Create (MyParameter : array of TIntArray);
begin
...
end;

答案 2 :(得分:1)

如果在答案中建议使用之前的类型,请注意您将其作为参考传递,请参阅:

Precompile fails when adding ng-bootstrap to an Angular-CLI project

答案 3 :(得分:0)

我更喜欢这个

procedure MakeMat(var c: TMatrix; nr, nc: integer; a: array of double);
var
  i, j: integer;
begin
  SetLength(c, nr, nc);
  for i := 0 to nr-1 do
    for j := 0 to nc-1 do
      c[i,j] := a[i*nc + j];
end;


MakeMat(ya, 5, 11,
       [1.53,1.38,1.29,1.18,1.06,1.00,1.00,1.06,1.12,1.16,1.18,
        0.57,0.52,0.48,0.44,0.40,0.39,0.39,0.40,0.42,0.43,0.44,
        0.27,0.25,0.23,0.21,0.19,0.18,0.18,0.19,0.20,0.21,0.21,
        0.22,0.20,0.19,0.17,0.15,0.14,0.14,0.15,0.16,0.17,0.17,
        0.20,0.18,0.16,0.15,0.14,0.13,0.13,0.14,0.14,0.15,0.15]);