我发现 delphi 字符串指针严重问题
在DELPHI 中,一般用'@+变量名’的形式,就可以获得该变量的首地址,如:
var
int: integer;
pi: ^integer;
begin
int := 100;
pi := @int;
end;
用类似上述的方法,整型、浮点型、字符型、一维数组,二维数组都能得到正确的结果,
但是,如果是字符串,则结果错误!
比如:
var
str, s: string;
pstr: ^char;
begin
s:='';
str :='abdeFGg AAA$#! 123'#0;
pstr := @str;
while p^ <> #0 do
begin
s := s +p^;
inc(p);
end;
form1.caption := s;
end;
该程序遍历字符串时,则不能正确得出结果,但如果把 pstr := @str; 改为 pstr := @str[1]; 则可以,
这说明DELPHI 在指针使用上,比较混乱,没有严格统一的定义,既然数组都可以'@+变量名'形式,为何单独字符串就不能用
'@+变量名'呢?非得要指定第一下标呢?这样非常容易造成使用错误和困惑。
所以,我觉得,OBJECT PASCAL 应该严格统一指针的使用定义!以免造成使用者的困惑不解。