如何将可变长度数组常量作为参数传递?

How to pass variable length array constant as a parameter?

我有很多二维数组的常量,一维长度可变,像这样:

const
  ThiamineRDA: array[0..2, 0..3] of Double =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  RiboflavinRDA: array[0..1, 0..3] of Double =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

我想将此常量作为参数传递给过程:

  LoadIntakes(Item, ThiamineRDA);

但是我如何定义该过程以允许该参数?

procedure LoadIntakes(Item:PNutrientInfo; IntakesList: array of... ???? );
begin
 //.....
end;

您不能传递二维开放的开放数组。但是如果其中一个维度的大小是固定的,你可以这样做,像这样:

(我省略了你的第一个参数,以便我可以检查它是否编译)

type
  TQArray = array[0..3] of double;
const
  ThiamineRDA: array[0..2] of TQArray =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  RiboflavinRDA: array[0..1] of TQArray =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

procedure LoadIntakes( IntakesList: array of TQArray );
begin
 //.....
end;

procedure Test;
begin
  LoadIntakes( ThiamineRDA );
end;

如果您希望将多维开放数组作为参数传递给某个过程,您首先需要为此类数组定义特殊类型。然后您甚至可以定义该类型的常量数组。

因此您的代码将如下所示:

type
  ThiamineRDA = array[0..2, 0..3] of Double;
  RiboflavinRDA = array[0..1, 0..3] of Double;

...

const
  ArThiamineRDA: ThiamineRDA =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3), (0, 1, 3, 0.5));
  ArRiboflavinRDA: RiboflavinRDA =
   ((0, 0, 0.05, 0.2), (0, 0.06, 0.11, 0.3));

...

  LoadIntakes(Item, ArThiamineRDA);