关于数组指针和c++中指针的区别 ( 积分: 20 )

  • 主题发起人 主题发起人 godlessme
  • 开始时间 开始时间
G

godlessme

Unregistered / Unconfirmed
GUEST, unregistred user!
type
aArray=Array[1..10] of integer;
parray=^aArray;


procedure TForm1.Button1Click(Sender: TObject);
var
myarr: aArray;
myparr: parray;
begin
myparr := @myarr;
myarr[1] := 1;
showmessage(inttostr(word(@myarr)));
showmessage(inttostr(integer(myparr)));
end;
运行结果发现两个窗口的值不一样,很是纳闷。在c++中数组名称本身是一个指针,
指向数组的第0个元素,在delphi中情况如何,请指教。
 
type
aArray=Array[1..10] of integer;
parray=^aArray;


procedure TForm1.Button1Click(Sender: TObject);
var
myarr: aArray;
myparr: parray;
begin
myparr := @myarr;
myarr[1] := 1;
showmessage(inttostr(word(@myarr)));
showmessage(inttostr(integer(myparr)));
end;
运行结果发现两个窗口的值不一样,很是纳闷。在c++中数组名称本身是一个指针,
指向数组的第0个元素,在delphi中情况如何,请指教。
 
showmessage(inttostr(word(@myarr)));
^^^^大哥,你搞搞清楚,指针是4字节的,word是2字节的,如果对,就见鬼了。
这样该试试:
showmessage(inttostr(dword(@myarr)));
^^^^^^^^//改成dword
showmessage(inttostr(integer(myparr)));
 
呵呵,自己搞错了
showmessage(inttostr(integer(myarr^)));
执行这条语句的时候提示“需要指针类型”。
是不是在delphi中数据名本身不是个指针。
但是我觉得数据名应该是个指针,只是编译器不允许转换类型?
 
delphi中各种数据类型存储方式不同,比如string类型,它得内容从string[1]开始,而string[0]放的是长度,而pchar就是指针类型,所有在delphi中不能进行两个类型的变量象c一样随便转换,需要强制类型转换。
 
string 类型的长度应该是放在integer(str)-4的这个地址中,而integer(str)-8放的是引用计数。
 
接受答案了.
 
后退
顶部