var
  c :string;
  d :pchar;
  e :^char;
  f :pchar;
  i:integer;
begin
    setlength(c,100);
    for i:= 1 to 50 do
      c[i] := 'a';
    f := @c;
    e := @c[1];
    d := @c[1];
    showmessage(f + '  ' + e^ +'  '+ '  '+ d + '  '+ d^);
    showmessage(c);
end;显示的结果:8!  a  aaaaaaaaaaaaaaaaaaaaa...aaE  a
           aaaaaaaaaaaaaa....E
请教一下pchar 和^char 的区别,为什么显示的是这样的结果?

解决方案 »

  1.   

    pchar是指向一个字符串首地址的批针,以#0结束^char不知道,学习
      

  2.   

    ^char: 
    e.g. 
    type
     PSingleChar = ^char;
    PSingleChar:指向单个char的指针;感觉没什么用处,容量太少(容量还没自己大,一个指针都是4个char了。)
      

  3.   

    pchar 和 ^char是一样的
    showmessage(f + '  ' + e^ +'  '+ '  '+ d + '  '+ d^);
    这句中f是个地址,当然显示出来是个你不知道的符号   f^是这个地址的值,但f := @c;并不是c的第一个字母,而应是f := @c[1]...也不知道pchar 和 ^char到底是不是一样的,我认为是的喔,看看了
      

  4.   

    本质上没区别,但在某些特殊情况下编译器会对它们做不同的处理上面的问题来源你对String本质认识的错误,String不是一般简单的变量,用SizeOf看看,它是个指针,@c等于是取指针的储存地址f := PChar(c);
    f := @c[1];都可达到你想要的结果
      

  5.   

    f为pchar类型,但你给的是string的地址,但string类型的内容是从1开始的,0是borland内部定义的,好像是长度,所以你把0位的地址给了f,所以f的内容就无法正常显示。
    e为char类型的指针,E^取的是首位。
    d也为pchar类型,但这次给的是正确的起始位置,所以得到的内容是50个a
    d^取的也是首位。从测试情况来看,pchar和^Char作用一样的。
      

  6.   

    f := @c 是什么地址?
    用^char怎么显示字符串c的值 
    showmessage(e)好像不行
      

  7.   

    >>指向单个char的指针;感觉没什么用处,容量太少(容量还没自己大,一个指针都是4个char了。这话说的不对,指针又不是用来指向固定数据的
      

  8.   

    pchar 好象是以NULL结尾的字符来,用于C中的,char应该是单个字符吧
      

  9.   

    >>f := @c 是什么地址?上面不是说了吗?是个指针的储存地址~~~>>用^char怎么显示字符串c的值 ShowMessage(PChar(e));
      

  10.   

    为什么要进行类型转化,^char 和 pchar 不一样吗?
      

  11.   

    这完全是编译器的问题虽然PChar和^Char完全一样,却只能将PChar直接隐式类型转换为String
      

  12.   

    就是说^char类型不能隐式类型转换为String?
      

  13.   

    e的本质是指针;
    而d,f的本质是字符
      

  14.   

    e的本质是指针;
    而d,f的本质是字符串
      

  15.   

    错了:
    PChar可以指向字符串,也可指向字符;
    ^Char只能指向单个字符
      

  16.   

    不过现在想想如果自己强制转型(并且知道字符串长度的话),^char也能当pchar用,尤其是^char就在字符串首部的时候(由str[1]得到的^char事实上与相应的pchar数值是相同的,至少用cardinal强制转换后);当然如果不强制转换而直接dereference提领^char的话,的确只能搞到一个char了(至少Delphi的作风是这样,用个指针括号加@跟^包得像个洋葱头)。