散分!讨论Delphi动态指针的问题。
先声明一个使用动态指针的纪录类型:
type
TTest = record
dw : DWORD;
ary : Array of DWORD;
end;
pTest = ^TTest;
然后:
var
test : PTest;
p : PDWORD;
begin
test := AllocMem( sizeof(TTest) + sizeof(dword) * 2 );
setlength(test.ary,2);
test.dw :=12345;
test.ary[0] := 111;
test.ary[1] := 222;
p := PDWORD(test);//强制转化指针类型
Inc(p);
p^ := 333;
if P^ = test.ary[0] then ...//问题来了,此句引发异常,
//如果改为:
if P^ = PTset(test).ary[0] then...//再转化回来,也不行!
问题是:
1:delphi的强制指针转化是否可逆?
2:据说delphi动态指针是系统管理的,也就是说,我申请内存后,test.ary[0]在内存中的位置并不是紧接着test.dw, 上例中,改变了P^的值并不会改变test.ary[0],对吗?
问题可能有点难,讨论一下吧!