棘手的动态数组与动态数组的兼容性

时间:2012-09-15 13:07:33

标签: arrays delphi pointers dynamic-arrays

考虑制作数组的旧技巧

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 相同)

那么这两种类型(PIntArray和PTDynIntArray)可以合并,类型转换,互换吗?怎么样?

1 个答案:

答案 0 :(得分:3)

您可以将IntArray(注意: PIntArray)转换为PTDynIntArray。反过来通常是不可能的。

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

您可以明确地将其写为@IntArray[0]