procedure TForm1.Button1Click(Sender: TObject);
var p:pchar;
    p1:pchar;
    s:string;
    s1:string;
begin
   p:=strlower(pchar(copy('xxx',1,1)+'xx'));
   p1:='xxx';
   if p=p1 then
   showmessage('p与p1相同')
   else
   showmessage('p与p1不同');
   s:=p;
   s1:=p1;
   if s=s1 then
   showmessage('s与s1相同')
   else
   showmessage('s与s1不同');end;运行结果是“p与p1不同”,“s与s1相同”
各位前辈帮帮我吧。

解决方案 »

  1.   

    pchar为字符串指针,在delphi中,两个指针变量被认为是类型不同的变量,如两个^integer变量a、b,即使指向的都是1,也是不同的。
    而字符串是否相等只比较字符串的内容。
      

  2.   

    这是delphi语言自身关于指针的特性。好像没什么道理可讲。
      

  3.   

    比较PChar    if StrComp(p,p1)=0 then
    showmessage('p与p1相同')
       else
       showmessage('p与p1不同');
       s:=p;
      

  4.   

    可是pchar好像是串,string才是指针。
      

  5.   

    晕 PCHAR 是指向STRING的指针!!
      

  6.   


    Pchar比较哪有用p=p1的?楼主好好看看基础书吧
      

  7.   

    同意 meiqingsong(阿飛) 的观点
      

  8.   

    var p:pchar;
        p1:pchar;
        s:string;
        s1:string;
    begin
       p:=strlower(pchar(copy('xxx',1,1)+'xx'));
       p1:='xxx';
       if p=p1 then
       showmessage('p与p1相同')
       else
       showmessage('p与p1不同');
       if p^=p1^ then
       showmessage('p^与p1^相同')
       else
       showmessage('p^与p1^不同');   s:=p;
       s1:=p1;
       if s=s1 then
       showmessage('s与s1相同')
       else
       showmessage('s与s1不同');end;执行一下上面的代码就会明白一些. 指针类型在比较的时候是比它所指向的地址的. 数字,字符串在比较的时候比的是具体的值.
      

  9.   

    相当于
      a:String;
      b:String;
      a:=strlower(pchar(copy('xxx',1,1)+'xx'));
      b:='xxx';
      p:=@a;
      p1:=@b;
    a和b是两个不同的变量,在计算机中存储的地址不同
    指针存放它所指向变量的地址,所以p与p1是不同的。s与s1内容相同,没什么好说的