異なる「開始点」から動的配列にアクセスするためにポインタを使用することが可能です
次のコードを検討してください。
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 時間を短縮できます。
知っている。投稿は古いものでしたが、特に新しい読者にとって、私の答えはここで関連性がある/関連性があると思います。