首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi指针相关

2012-03-22 
delphi指针相关,高手进procedure TForm1.btn1Click(Sender: TObject)varp1 :PCharP2 :PIntegerI :Integ

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会帮你把字符类型的指针转自动转换成字符类型
而数值类型没有,所以要自己处理了

热点排行