Delphi2009的指针操作十分混乱,或者应该算严重的Bug!

sy_100000 2009-06-13 03:20:02
比如

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中,指针操作有些混乱。
...全文
149 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
faustz 2011-05-30
  • 打赏
  • 举报
回复
我以前也常有脑子没转过来的时候,半天才发现,后来也是巨汗,再往后才学会不要以为自己发现了DELPHI的明显BUG之类的,大家不要打击他了。
faustz 2011-05-30
  • 打赏
  • 举报
回复
嘿嘿,低级错误,楼主是脑子没转过来,汗
llwlz 2009-06-25
  • 打赏
  • 举报
回复
孤枫兄也在这里,呵呵Delphi2009群里你在
我是秋风
武稀松 2009-06-23
  • 打赏
  • 举报
回复
我一直在用D2009和D2010.没发现指针有问题.估计楼主自己水平不行,理解不了指针操作.赖开发工具
支持中文哦 2009-06-14
  • 打赏
  • 举报
回复
貌似Delphi有个生存期自动内存管理的,.net的引用数据类型就是这个技术的发扬光大。
这样的变量你进行指针操作是不是有点难为delphi编译器嘛,将就下嘛,.net clr同样也做不好。
preserve 2009-06-13
  • 打赏
  • 举报
回复
又看到楼主发0分贴 大放厥词了~
搬个板凳看热闹
Seamour 2009-06-13
  • 打赏
  • 举报
回复
我觉得吧,你还是不要想当然的好像了,这样只会自取其辱
你要是问“在不同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
lhy 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sy_100000 的回复:]
引用 3 楼 Seamour 的回复:
顺便说一下,在cpp中,char对应的是delphi中的AnsiChar(c中的char对应的是Byte或ShortInt或AnsiChar),wchar_t对应的是WideChar
d2009的Char是WideChar,和char根本对不上,不懂你就不要胡说八道了

另外,看样子你也搞不清delphi中用var/out/const修饰的参数都是怎么回事,以你的水平在c和delphi之间相互转换函数接口也是个问题


多谢你教导,否则AnsiChar和WideChar我还真不知道…
[/Quote]
建议楼主再仔细看一遍红字的部分,不懂得部分去查书。

sy_100000 2009-06-13
  • 打赏
  • 举报
回复
真的好失败,发帖给这样的人看,真是一大耻辱!
sy_100000 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Seamour 的回复:]
顺便说一下,在cpp中,char对应的是delphi中的AnsiChar(c中的char对应的是Byte或ShortInt或AnsiChar),wchar_t对应的是WideChar
d2009的Char是WideChar,和char根本对不上,不懂你就不要胡说八道了

另外,看样子你也搞不清delphi中用var/out/const修饰的参数都是怎么回事,以你的水平在c和delphi之间相互转换函数接口也是个问题
[/Quote]

多谢你教导,否则AnsiChar和WideChar我还真不知道。

不过,好象你连char * 还没明白。此外,貌似你连指针如何转换完全不懂!比如,DWORD *如何成为char *?拜托你!
sy_100000 2009-06-13
  • 打赏
  • 举报
回复
看来,这里高人如云,我不用说话了。

各位好自为之吧。
XY.Chen 2009-06-13
  • 打赏
  • 举报
回复
我觉得以楼主的人才,干编程真的是浪费了,去做销售尤其是传销肯定很有效果!
Seamour 2009-06-13
  • 打赏
  • 举报
回复
顺便说一下,在cpp中,char对应的是delphi中的AnsiChar(c中的char对应的是Byte或ShortInt或AnsiChar),wchar_t对应的是WideChar
d2009的Char是WideChar,和char根本对不上,不懂你就不要胡说八道了

另外,看样子你也搞不清delphi中用var/out/const修饰的参数都是怎么回事,以你的水平在c和delphi之间相互转换函数接口也是个问题
Seamour 2009-06-13
  • 打赏
  • 举报
回复
又开始了,你自己脑子乱用不明白指针,还赖人家delphi
xmfan2000 2009-06-13
  • 打赏
  • 举报
回复
改源代码呀。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧