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;

解决方案 »

  1.   

    那是因为delphi编译器做过优化,有时可以忽略 delphi会帮你补足ShowMessage(p^); ShowMessage(p); 是一样的 所以showmessage可以接受字符类型的指针
    而integer是值类型的,integer值类型的不能按照字符型来显示,需要先转换,所以你需要先InttoSTr(P2^)
      

  2.   

    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