delphi指针相关,高手进
procedure TForm1.btn1Click(Sender: TObject);
var
p1 :PChar;
P2 :PInteger;
I :Integer;
begin
P1 :='ABC';
I :=123;
P2 :=@I;
ShowMessage(P1);
ShowMessage(InttoSTr(P2^));
end;
为什么PCHAR指针可以不用进行指针引用接触就可以直接showmessage(P1),
但是showmessage(InttoSTr(P2))就不可以.
还有记录类型的指针也是一样.
TRec =record
name :string;
age :integer;
end;
TPRec =^TRec;
var
Rec1 :TRec;
Rec2 :TPRec;
begin
Rec1.name ='张三';
Rec1.age :=10;
Rec2 :=@Rec1;
showmessage(Rec2.name)
end;
[解决办法]
那是因为delphi编译器做过优化,有时可以忽略 delphi会帮你补足ShowMessage(p^); ShowMessage(p); 是一样的 所以showmessage可以接受字符类型的指针
而integer是值类型的,integer值类型的不能按照字符型来显示,需要先转换,所以你需要先InttoSTr(P2^)
[解决办法]
Pchar是一串字符的首地址,delphi可以自动把它转换成string,string可以通过Pchar(string)转换成Pchar类型。
PInteger是整型数据的地址,delphi不会自动转换的,
例如
P1 :='ABC';
I :=123;
P2 :=@I;
实际上:p2^等于123,p1^等于A
如果s: string;
s = p1那么s等于ABC
[解决办法]
因为D会帮你把字符类型的指针转自动转换成字符类型
而数值类型没有,所以要自己处理了