0

配列を作成する古いトリックを考える

Type
  IntArray = Array Of Integer;
  PIntArray = ^IntArray
  PTDynIntArray = ^TDynIntArray;
  TDynIntArray = Array[0..0] Of Integer;

{later...}

GetMem(APTDynIntArray,100*SizeOf(Integer));
APTDynIntArray^[49] := 50

このトリッキーな配列を標準の動的配列と互換性を持たせる方法はありますか?

たとえば、古い (1999 年からとしましょう) 単位を翻訳したい場合は、

Procedure DoSomething(Data: PTDynIntArray);

また、データが上記の構文 (括弧内の dataname-dereference-index) を使用して処理されることを考慮すると、引数としてPIntArrayを渡しても Delphi コンパイラは停止しませんが、実行時に AV を取得します (Delphi が考慮していると思います)。 、この場合、そのPIntArrayはPTDynIntArrayと同じです)

では、これら 2 つの型 (PIntArray と PTDynIntArray) を組み合わせたり、型をキャストしたり、交換したりできますか? どのように ?

4

1 に答える 1

3

IntArray(注: not PIntArray ) を に変換できますPTDynIntArray。逆は一般的にありえません。

AnIntArrayは、配列の最初の要素へのポインターとして格納されます。配列の前に配列の長さなどの情報が表示されますが、プロシージャが配列要素のみにアクセスする場合は、害はありません。

明示的に、 のように書くこともできます@IntArray[0]

于 2012-09-15T13:11:42.287 に答える