比如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中,指针操作有些混乱。

解决方案 »

  1.   

    又开始了,你自己脑子乱用不明白指针,还赖人家delphi
      

  2.   

    顺便说一下,在cpp中,char对应的是delphi中的AnsiChar(c中的char对应的是Byte或ShortInt或AnsiChar),wchar_t对应的是WideChar
    d2009的Char是WideChar,和char根本对不上,不懂你就不要胡说八道了另外,看样子你也搞不清delphi中用var/out/const修饰的参数都是怎么回事,以你的水平在c和delphi之间相互转换函数接口也是个问题
      

  3.   


    多谢你教导,否则AnsiChar和WideChar我还真不知道。不过,好象你连char * 还没明白。此外,貌似你连指针如何转换完全不懂!比如,DWORD *如何成为char *?拜托你! 
      

  4.   

    我觉得吧,你还是不要想当然的好像了,这样只会自取其辱
    你要是问“在不同endian的cpu上,char* 和 DWORD* 转换会有哪些差别”这种层次的问题,我还愿意回答一下。你自己搞不清的东西不代表别人也搞不清楚,何况是你的水平还不怎么样,问的都是些初学者的问题我在qc上提交了5个bug,其中4个已经open了
    这两个是我自己发现的问题:
    Alignment problem of local variable
    A Compiler bug that calling method-type parameters
    当然这两个是每个版本都有的bug,只是我前一段时间才发现。当然,这两个都是跟反汇编才找到的问题,你肯定看不懂
     
    这两个是别人在盒子上提出来的问题,我确认了之后,虽然自己英文水平不怎么样,但还是代劳报告了一下:
    Removal of Generics.Collections.TObjectDictionary<,> incorrect
    Incorrect size of generic static multi-dimensional array type如果你说的确实是bug,我同样也不会吝惜自己的时间代劳报告一下。但是没办法,都是些你自以为是的基础知识对于你的问题,我只能建议你找一两本质量好点儿的入门教材,再遇到相关问题的时候,先好好读一读相关章节,不要把自己的无知当作delphi的bug
      

  5.   

    貌似Delphi有个生存期自动内存管理的,.net的引用数据类型就是这个技术的发扬光大。
    这样的变量你进行指针操作是不是有点难为delphi编译器嘛,将就下嘛,.net clr同样也做不好。
      

  6.   

    孤枫兄也在这里,呵呵Delphi2009群里你在
    我是秋风
      

  7.   

    我以前也常有脑子没转过来的时候,半天才发现,后来也是巨汗,再往后才学会不要以为自己发现了DELPHI的明显BUG之类的,大家不要打击他了。