考虑制作数组的旧技巧
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)可以合并,类型转换,互换吗?怎么样?
答案 0 :(得分:3)
您可以将IntArray
(注意:不 PIntArray
)转换为PTDynIntArray
。反过来通常是不可能的。
IntArray
存储为指向数组第一个元素的指针。数组前面有关于数组长度等的信息,但如果你的程序只访问数组元素,它们不会造成任何伤害。
您可以明确地将其写为@IntArray[0]
。