有关Pchar 和 AnsiString的超难问题,请高手出招! ( 积分: 200 )

  • 主题发起人 主题发起人 hotboy
  • 开始时间 开始时间
H

hotboy

Unregistered / Unconfirmed
GUEST, unregistred user!
请看代码:
procedure TForm1.Button1Click(Sender: TObject);
var s:AnsiString;
Ptr,Ptr1:Pchar;
begin
s:='new';
Ptr:=@s[1];
Memo1.Lines.Add(Ptr);//问题一
Ptr1:=@S;
Memo1.Lines.Add(Inttostr(Integer(Ptr1)));
Memo1.Lines.Add(Inttostr(Integer(Ptr)));//问题二
end;

我的问题1是,既然Ptr是指针型变量,Memo1.Lines.Add(Ptr);为什么没有错误?按照道理Memo1.Lines.Add()的括号里应该是字符串才匹配。
问题2,@s是什么?为什么与@s[1]相差很大?
 
AnsiString的结构:
4byte|4byte|pchar ==> 引用记数|pchar长度|pchar
@s[1] = pchar
@s = AnsiString结构地址
 
楼上解答正确
 
那么第一个问题(见下),如何回答呢?
既然Ptr是指针型变量,Memo1.Lines.Add(Ptr);为什么没有错误?按照道理Memo1.Lines.Add()的括号里应该是字符串才匹配。
 
@s[1] = pchar
string类型兼容pchar,反之不行。
例:
Ptr := s;//可编译通过
s := Ptr;//编译错误
 
错了,例子写反了,应该是:
s := Ptr;//可编译通过
Ptr := s;//编译错误
 
學習學習。。。
 
多人接受答案了。
 
后退
顶部