Delphi还真贴心啊,哈哈。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do
showmessage(inttostr(i));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do
showmessage(inttostr(i));
end;
试试看
就像
i:=4;
i:=i+1;
一样没什么
关键是
在
i:=4;
后在
for i:=0 to i-1 do
中首先运算i-1 ,这是优先运算的
确定了最大值以后才开始逐步增加
i=4;
for(i=0;i<i-1;i++)
printf("%d",i);
不执行循环的。那孩子他爹,不用i有什么有意思的事啊?
for i := 0 to i - 1 do
showmessage('hello world');
打四个hello world,没什么啊。这不能是bug,只是优化。
好像没什么奇特事件发生?!
showmessage('hello world');乍一看,真的有点迷惑,不推荐省那么一个变量声明
function Sum:integer;
begin
进行一番计算;
result := 一个计算结果;
end;procedure Main;
var
i,j:integer;
begin
j := Sum;//先取出值,以为循环中每次都需要调用一次函数
for i := 0 to j - 1 do
;
end;现在可以放心的写:
for i := 0 to Sum - 1
因为我知道Sum函数只会执行一次哈。
呵呵,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,只是优化。
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;我分析的对不?
C语言是每次都计算循环条件的,不过它的for循环功能强大,这样做也是为了能实现其它循环的功能。
谁把C语言的for循环的反汇编代码贴出来,我机器上只有老式TC,还不太会使^_^
>>for循环是事先确定循环次数的,你可以在调试的时候打开CPU看汇编,我说过,Delphi先把循环次数算出来放在寄存器ESI中,以后每次减1,不会再重新计算循环次数啦。