字符数组和字符串
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 的后期版本才有的. }
浙公网安备 33010602011771号