可以使用指针从不同的“起点”访问动态数组
考虑代码:
TYPE
tListArray = ARRAY[0..0] OF CARDINAL; {Or any other type you need}
tDynamicCardinalArray = ARRAY OF CARDINAL;
VAR
MyList : tDynamicCardinalArray;
pArrPos1, pArrPos2 : ^tListArray;
BEGIN
SetLength(MyList,100);
pArrPos1 := @MyList[0];
pArrPos2 := @MyList[50];
...
...
END;
好处是您可以直接访问,无需复制或移动数据。缺点是不能在这些数组指针上使用诸如“high”、“low”和“length”之类的函数。或者,如果您想要使用结果,至少不会。在寻址数组指针时,您必须确保永远不会超出 SourceArray MyList 的范围。好处是它为动态数组带来了多功能性。众所周知,动态数组只能从 0 .. 到最大大小。另一边的 pArrPos2 有效地将动态数组呈现为一个数组指针,它也接受负寻址:
pArrPos2^[-50] := 0; // Equals: MyList[ 0] := 0
pArrPos2^[ 0] := 50; // Equals: MyList[50] := 50
pArrPos2^[ 49] := 99; // Equals: MyList[99] := 99
使用指针,您可以将动态数组“切片”成几部分,但您必须分别跟踪“高”、“低”和“长度”,至少如果您想要一个可以更改的完全动态的解决方案即时在软件中。所需的额外信息可以作为额外参数传递给过程或函数,并且比实际将数据集复制或移动到新数组中花费的 CPU 时间更少。
我知道。这篇文章很旧,但我仍然认为我的回答在这里/可能是相关的,特别是对于新读者。