如何声明一个长度在运行时指定的数组?

3

我将需要声明一个用户定义维度的数组。这个数组位于一个相当大的程序中,将其更改为列表可能会带来一些问题。

现在我的数组声明如下:

Buffer: array[0..myCostant * 2] of Byte;

myCostant是一个已经定义的常量。现在我需要使用一个变量,得到类似这样的结果:

Buffer: array[0..myVar * 2] of Byte;

但我无法在数组定义中使用变量。

我如何在不更改数组的情况下解决这个问题? 这个变量有一个上限,所以我可以用这个最大值声明数组,并通过另一条指令来减小它的大小吗?


关于数组的文档告诉您有关数组的所有知识: http://docwiki.embarcadero.com/RADStudio/XE3/en/Structured_Types#Arrays - David Heffernan
1个回答

10

你应该使用动态数组

var
  Buffer: array of Byte;

begin
  SetLength(Buffer, myVar*2 + 1);

或者,您可以使用已知上限长度的静态数组,并在变量中记录数组的当前“有意义”长度,例如 CurrentLength

然后,您可以替换,例如,

for i := 0 to Length(Buffer) - 1 do
  SomethingWith(Buffer[i]);

通过

for i := 0 to CurrentLength - 1 do
  SomethingWith(Buffer[i]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接