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中,指针操作有些混乱。
...全文
148 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
  • 打赏
  • 举报
回复
改源代码呀。
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制法设计(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的设计验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。

830

社区成员

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

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