var
  S: string;
  I: Integer;
begin
  S := 'abc';
  S := PChar(S);
  Memo1.Lines.Add(S);
  I := Integer(S);
  Memo1.Lines.Add(IntToStr(I));//这里为什么会出现数子
  S := 'abc';
  Memo1.Lines.Add(IntToStr(Integer(PChar(S))));//这里为什么还是数子,而且跟上面的数子不一样
end;

解决方案 »

  1.   

    var
      S: string;
      I: Integer;
    begin
      S := 'abc';//S可以看成是字符串指针
      S := PChar(S);
      Memo1.Lines.Add(S);
      I := Integer(S);//取得的是地址,当然会是数字
      Memo1.Lines.Add(IntToStr(I));//这里为什么会出现数子
      S := 'abc';//地址变了,重亲分配了空间
      Memo1.Lines.Add(IntToStr(Integer(PChar(S))));//这里为什么还是数子,而且跟上面的数子不一样//地址不一样,肯定数字会不一样了.
    end;
      

  2.   

    I := Integer(S) //这里应该是把后面的S型转成I型才对呀.怎么会是取得地址呢.
      

  3.   

    把字符转换成整数应该是用StrToInt
      

  4.   


      I := Integer(S);  等效于 @S[1] 即取字符串S的地址  IntToStr(Integer(PChar(S))));就不知取到哪里去了 临时的PChar指针地址?
      

  5.   

    是这样的 
    1.I:= Integer(S); 是取得S的内存地址值。
    2. 数字不一样,是因为你又重新定义了 S := 'abc';这个时候S重新申请内存,内存再次分配,地址值肯定不一样了。
    如果你把第二次的S := 'abc';注释掉,你就会发现数字是一样的了。。