1)
var
  i,m,c: Integer;
begin
  i := 0;
  c := 0;
  m := 1;   //此处的赋值不会执行,调试显示未分配值
  repeat
    m := 6;
    c := c + i;
    i := i + 1;
  until i > m;
  Edit1.Text := InttoStr(c);
2)
var
  i,m,c: Integer;
begin
  m := 1;
  c := 0;
  for i := 0 to m do
  begin
    m := 6; // 循环终止在循环体内赋值也是不能分配.
    c := c + i;
  end;
  Edit2.Text := InttoStr(c);第1)题的m是在第二次赋值时有效,而第2)题的m仅在第一次赋值有效,为什么?

解决方案 »

  1.   

    楼上的,你好像说的不完整。
    1.第一种情况是因为你两次初始化m的值,所以Delphi就把循环外的m的初始化给优化掉了,不需要了。你如果把循环内部的m的赋值语句注释掉,那么第一次的赋值就会被执行了。
    2.因为整段代码中你的m和c都没有被使用,就是没有被用作右值赋给什么变量什么的。所以也被优化掉了
      

  2.   

    见识!
    对于JVM我比较了解,但关于DELPHI的编译器哪又相关可用资源?
      

  3.   

    在FOR 的结构,更改 自增量的 数值不会对FOR 循环有影响. 看看PAS..