动态数组的地址问题.(100分)

  • 主题发起人 主题发起人 xwings
  • 开始时间 开始时间
X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
我声明了一个结构.
PRec1=TRec1;
TRec1=packed record
Val1:DWORD:
Val2:DWORD;
end;
PRec2=TRec2;
TRec2=packed record
Size:DWORD;
PRec1Array:Array of PRec1;
end;

使用的时候
with PRec2 do
begin
Setlength(PRec1Array,10);
PRec1Array[0]:=aPRec1;
PRec1Array[1]:=aPRec2;
.......
end;
我发现PRec2.Prec1Array^ 的地址 和PRec2.Prec1Array[0]^的地址不是同一个地址. 请问是怎么回事?
因为我要和VC混和写程序都要用到这个结构. VC中声明的时候使用 *PRec2:PRec1Array 代替了 array of Prec2 .
VC中如何定位PRec2.Prec1Array[0]^ PRec2.Prec1Array[1]^ .... ?
 
你代码写错了吧!

PRec1=TRec1;---------->>PRec1 = ^TRec1
TRec1=packed record
Val1:DWORD:
Val2:DWORD;
end;
PRec2=TRec2;---------->>PRec2 = ^TRec2
TRec2=packed record
Size:DWORD;
PRec1Array:Array of PRec1;
end;

使用的时候
with PRec2 do
begin
Setlength(PRec1Array,10);
PRec1Array[0]:=aPRec1;
PRec1Array[1]:=aPRec2;
.......
end;
 
和呵呵. 楼上的真细心. 谢谢啦. 能回答我的问题么?
 
可再写详细一点吗?

目前我也正研究D与C++的数据交换
据目前试验的目的,与你大概相似!

> 我发现PRec2.Prec1Array^ 的地址 和PRec2.Prec1Array[0]^的地址不是同一个地址
PRec2.Prec1Array---->这应该是地址吧
加^就是得指针数据的值
试一下PRec2后加^,PRec2^.Prec1Array与PRec2^.Prec1Array[0]
 
呵呵.一个意思啦.. PRec2.Prec1Array 的地址和PRec2.Prec1Array[0] 的地址不是同一个.我测试一下了发现差8个字节.不知道是不是固定的.
 
当然不是同一地址啦。
Prec1Array : 指针: len=4 bytes-->指向一个动态分配的数组
Prec1Array[0]: 指针, 位于Pointer(Prec1Array)^的地址+偏移量0
Prec1Array[1]: 指针,位于Pointer(Prec1Array)^+偏移4(指针的长度)
Prec1Array[0]^: 动态分配的TRec1结构,不知道在哪里了....
 
楼上的说:"Prec1Array : 指针: len=4 bytes-->指向一个动态分配的数组
Prec1Array[0]: 指针, 位于Pointer(Prec1Array)^的地址+偏移量0"

意思是Prec1Array^ 和 Prec1Array[0] 的地址一样咯?
 
对。Prec1Array^和@(PRec1Array[0])一样。
但是PRec1Array^和PRec1Array[0]^就是两回事了。
 
谢谢.我搞明白了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
677
import
I
后退
顶部