TO:Tiga(风中人..) 
我的记忆中PASCAL是语法最严谨的啊。

解决方案 »

  1.   

    是不是DELPHI把原本严谨的PASCAL修改得不严谨了?
      

  2.   

    我也估计是DELPHI修改了原本严谨的PASCAL。其实在DELPHI中,很多地方用到的都是指针,比如窗体在调用中传递的也是指针,如果按标准的PASCAL思想就应该是FORM^.SHOW;要不然这就是BORLAND用新的OOP思想将标准的PASCAL进行扩充的结果。
      

  3.   

    个人理解
    pchar是一个连续的指针,而string的不是一个连续的指针。即:
    s: string;
    s[i]的值不是s[0]的地址加上i*sizeof(char)的地址内所存储的值而pchar是相等的这取决于String的类型,所以不能直接赋值,必须做出转换
    s:=string(p);
    而将s赋值给p则必须一个一个字符的复制
      

  4.   

    但是有些时候又必须使用P^的调用方式才能得到结果,比如:s := '1234567890';
    p := @s[1];在这个时候如果我要通过指针P得得结果就必须使用P^.或者用强制类型转换,是不是DELPHI有时在处理指针时有些混淆?
      

  5.   

    关于你的第一个问题:
    var
      p : pchar;
      s : string;
    begin
      p := '1234567';
      s := p;//这里是充许的
      caption := s;
      p := s;//这里却是不行的。
    end;
      

  6.   

    这也正是我困惑的地方啊,为什么 S := P 可以而 p:= s就不行呢?
      

  7.   

    s := 'abcdefg';
      p := @s[1];
      caption := p;
    这样处理也可以得到正确的结果,真是有点不好理解。
      

  8.   

    s := 'abcdefg';
      p := @s[1];
      caption := p^;
    在这个例子中CAPTION 却只能得到一个字符'a',困惑。
      

  9.   

    s := 'abcdefg';
      p := @s[1];
      caption := p^;
    在这个例子中p^相当于一个p[0];
    而 caption:=p;是delphi在内部处理了,对p进行了强制转换。因为caption相当于string;
      

  10.   

    Object Pascal认为每一个指针类型是相异的,指针间的赋值必须建立一个新的类型,比如var a:^integer;b:^integer;在代码中a和b并不兼容!