呵呵,意外发现这样的代码也能正确运行。

eastliangliang 2005-03-04 11:36:22
Delphi还真贴心啊,哈哈。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do
showmessage(inttostr(i));
end;
...全文
383 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw549 2005-03-07
  • 打赏
  • 举报
回复
回来晚了,循环中不用i,可以单步跟踪一下,发现i是从大到小执行的,和for的写法没有关系,原理上面已经说了。
>>for循环是事先确定循环次数的,你可以在调试的时候打开CPU看汇编,我说过,Delphi先把循环次数算出来放在寄存器ESI中,以后每次减1,不会再重新计算循环次数啦。
Sunniness 2005-03-05
  • 打赏
  • 举报
回复
呵呵,晕倒
caiso 2005-03-05
  • 打赏
  • 举报
回复
顶一下
eastliangliang 2005-03-05
  • 打赏
  • 举报
回复
for循环是事先确定循环次数的,你可以在调试的时候打开CPU看汇编,我说过,Delphi先把循环次数算出来放在寄存器ESI中,以后每次减1,不会再重新计算循环次数啦。
C语言是每次都计算循环条件的,不过它的for循环功能强大,这样做也是为了能实现其它循环的功能。
谁把C语言的for循环的反汇编代码贴出来,我机器上只有老式TC,还不太会使^_^
merkey2002 2005-03-05
  • 打赏
  • 举报
回复
Delphi还真贴心啊,哈哈。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do //这里的i-1 运算先于i:=0,而且for 循环事先确定循环次数,
//不像 while <条件> do 那样每次循环前要进行重新判断.因此这里i-1只执行了一次.
showmessage(inttostr(i));
end;

我分析的对不?
Breakc0de 2005-03-05
  • 打赏
  • 举报
回复
呵,也是啊。
才子鸣 2005-03-05
  • 打赏
  • 举报
回复
up
lushiyu0 2005-03-05
  • 打赏
  • 举报
回复
回复人: eastliangliang(青苹果) ( ) 信誉:137 2005-03-04 14:27:00 得分: 0


呵呵,C语言里可不是这样的。
i=4;
for(i=0;i<i-1;i++)//--------------老大,这行和上一行i=4 之间是不是有什么冲突?当染不能执行了!
printf("%d",i);
不执行循环的。

那孩子他爹,不用i有什么有意思的事啊?
for i := 0 to i - 1 do
showmessage('hello world');
打四个hello world,没什么啊。

这不能是bug,只是优化。


cangwu_lee 2005-03-05
  • 打赏
  • 举报
回复
语言的特点
eastliangliang 2005-03-05
  • 打赏
  • 举报
回复
呵呵,楼上想的太多啦,这点小事,不用想那么多大道理哈^_^
firstshine 2005-03-05
  • 打赏
  • 举报
回复
所以,谁都没有资格教训新手:我已经精通XXX......

写程序,就得学到老
lw549 2005-03-04
  • 打赏
  • 举报
回复
呵呵,如果不是ShowMessage用到了i,还有更有意思的事呢:)
试试看
hthunter 2005-03-04
  • 打赏
  • 举报
回复
我只要分……
ly_liuyang 2005-03-04
  • 打赏
  • 举报
回复
本来就是可以的

http://lysoft.7u7.net
DieGhost 2005-03-04
  • 打赏
  • 举报
回复
想想也是,自己原来都是多此一举了
lym_1978 2005-03-04
  • 打赏
  • 举报
回复
呵呵
gxgyj 2005-03-04
  • 打赏
  • 举报
回复
^_^
DieGhost 2005-03-04
  • 打赏
  • 举报
回复
昏倒
eastliangliang 2005-03-04
  • 打赏
  • 举报
回复
Delphi在循环开始把i+1算出来放在ESI中,以后就不用变量i了。我以前都是用两个变量完成这个循环功能,现在看真是多此一举啊。
XXSingle 2005-03-04
  • 打赏
  • 举报
回复
呵呵,平时都没注意喔
加载更多回复(17)

830

社区成员

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

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