关于指针的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 illiperson
  • 开始时间 开始时间
I

illiperson

Unregistered / Unconfirmed
GUEST, unregistred user!
var<br>str:string;<br>strp:Pstr;<br>begin<br>&nbsp;&nbsp;strp:=@str;<br>end;<br>在这里strp取到的是堆栈的地址,在堆栈中存放着str的直接地址。如何能取到字符串str在内存中的直接地址啊?
 
一般编译器中,&nbsp;全局变量使用的是内存地址,&nbsp;而过程函数中的变量使用的堆栈中的内存;<br>调用过程函数结束后,&nbsp;堆栈(也是内存)中的内容不能使用了;<br>但程序结束之前,&nbsp;全局变量(内存)的数据是一直可以使用的;
 
strp:=Integer(str)&nbsp;<br>或者strp:=&nbsp;Pointer(Pointer(longint(@Str))^)
 
procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;str:&nbsp;string;<br>&nbsp;&nbsp;Str1:Pchar;<br>begin<br>&nbsp;&nbsp;str:=&nbsp;'123';<br>&nbsp;&nbsp;str1:=Pchar(str);<br>&nbsp;&nbsp;Memo1.Lines.Add('Str栈地址:'+Inttostr(Longint(@Str)));<br>&nbsp;&nbsp;Memo1.Lines.Add('123的堆地址:'+inttostr(Longint(Str)));<br>&nbsp;&nbsp;Memo1.Lines.Add('123的堆地址:'+inttostr(Longint(Pointer(Longint(@Str))^)));<br>end;
 
strp:=LongInt(str);
 
procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;str,str2:string;<br>begin<br>&nbsp;str:=&nbsp;'abc';<br>&nbsp;str2:=&nbsp;'bcd';<br>&nbsp;Edit1.Text:=&nbsp;IntToHex(integer(@str),8);//局部栈地址<br>&nbsp;Edit2.Text:=&nbsp;IntToHex(integer(str),8);//全局堆地址(直接地址)<br>&nbsp;Edit3.Text:=&nbsp;IntToHex(integer(@str2),8);<br>&nbsp;Edit4.Text:=&nbsp;IntToHex(integer(str2),8);<br>end;
 
多人接受答案了。
 
后退
顶部