procedure TForm1.Button1Click(Sender: TObject);var
  i,j:Integer;
begin
  j:=-99;
  i:=0;
  for i:=0 to j do
  begin  end;  showmessage(inttostr(i));        //结束的时候 i 为什么不是 0 ?end;

解决方案 »

  1.   

    由于后面i在循环中被使用
    所以
    i:=0
    这一句代码被DELPHI优化了
    你可以按F7单步执行,
    i:=0这一行根本就没有执行
      

  2.   

    delphi里
    用作for循环的变量在for结束后
    他的值可能是不确定的
    这样的话 最好选用while 或者repeat
      

  3.   

    那  for   i:=0   to   j   do  中的
    i:=0 应该要执行的吧?
      

  4.   

    不要在循环外使用循环的变量,因为会有很多未知的结果。
    建议你这样写:
    procedure   TForm1.Button1Click(Sender:   TObject); 
    var 
        i,j,n:Integer; 
    begin 
        j:=-99; 
        n:=0; 
        for   i:=0   to   j   do 
        begin 
          n:= i;
        end;     showmessage(inttostr(n));
    end; 
      

  5.   

      j := -99;             //执行,
      i := 0;               //不执行, 由于后面i在循环中被赋值  for i := 0 to j do    //执行, 1> 先做 0 与 j 比较, 判断无需做循环, i不赋值
      begin  end;  showmessage(inttostr(i)); 
      

  6.   

    在菜单Project中把Compiler中的Optimization选项关闭,或者在代码中加上{$O-}编译开关,结果就会象楼主分析的那样了。
      

  7.   

    7楼说的是,我认同,
    for i := 0 to jdo
    begin
       ...
    end;觉得应该为
    for i := 0 downto j do
    begin
       ...
    end; showmessage(inttostr(i)); 输出为:
        -99不知道这样可否