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

有没有办法让这个棘手的数组与标准动态数组兼容?

例如,如果我想用

Procedure DoSomething(Data: PTDynIntArray);

并且考虑到数据将使用上述语法(括号中的 dataname-dereference-index)进行处理,如果我将PIntArray作为参数传递,Delphi 编译器将不会停止,但是我在运行时得到一个 AV(我猜 Delphi 认为, 在这种情况下, PIntArray与PTDynIntArray相同)

那么这两种类型(PIntArray 和 PTDynIntArray)可以组合、类型转换、互换吗?如何 ?

4

1 回答 1

3

您可以将IntArray(注意:not PIntArray ) 转换为PTDynIntArray. 反过来一般是不可能的。

AnIntArray存储为指向数组第一个元素的指针。数组前面是关于数组长度等的信息,但是如果您的过程只访问数组元素,它们不会造成任何伤害。

明确地说,您也可以将其写为@IntArray[0].

于 2012-09-15T13:11:42.287 回答