代码改变世界

字符数组和字符串

2011-12-28 14:23  yugengshan  阅读(89)  评论(0)    收藏  举报

{ 字符数组和字符串在内存中的储存方式不一样:
  字符数组就是一串连续的字符, 当然最后一个也不一定是 #0;
  AnsiString 字符串不仅是 #0 结束的, 并且在它的前面还有 8 个辅助字节,如: }

var
  s: string;
  p: PChar;
begin
  s := 'ABCDEFG';
  p := PChar(s);
  ShowMessage(p);
  ShowMessage(IntToStr(Integer(@p)));//这是 p 的地址
  ShowMessage(IntToStr(Integer(p))); //这是 p 指向的地址
  ShowMessage(IntToStr(Integer(s))); //这是 s 真正的起始地址, 它前面还有 8 个字节
  // p := PChar(s); 的过程就是让 p 的目标地址指向 s 起始地址的过程.
end;
{ ----------------
  对字符数组来讲, 它和字符串的结构完全不一样; 但对任何变量 Delphi 都有一个管理地址, 如数组的 @arr, P = PChar(@arr) 的过程中,
  不仅仅要找到数组的起始地址, 还要在数组的终点后添加 #0, 才成为 PChar.
  ----------------
  由此看来, 它们的工作机制完全不同, 具体用法就当作 Delphi 的规定吧(其实就是一种规定).
  就是 p := PChar(s); 的转换方法也是 Delphi 的后期版本才有的. }