Delphi2009的指针操作十分混乱,或者应该算严重的Bug!
比如
TextOut、ExtTextOut,其中都有PChar字符串指针参数,假使输出Text :PChar,从第i个开始输出:
ExtTextOut(DC, x, y, 0, nil, Text[i], n, nil);//输出正常,Text[i] 指向Text的第i个字符的地址:Text[i] = Inc(Text, i) = @Text[i]
TextOut(DC, x, y, Text[i], n);//编译不能通过,因为Text[i]是Char,但需要PChar参数:Text[i] 是第i个字符;@Text[i]才是第i个字符的地址,Text[i] = (@Text[i])^。必须:TextOut(DC, 0, 0, @Text[i], n)才行
Text[i]在C++里是char * Text的第i个字符,Text + i在C++里是char * Text的第i个字符的地址!
可在Delphi2009里,Text[i]居然有时是表示第i个字符的地址,有时是表示第i个字符!
于是,开放数组、动态数组、指针类型转换、指针移动等与指针相关的操作,十分混乱。
Delphi2009中,指针操作有些混乱。