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仅在第一次赋值有效,为什么?
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.第一种情况是因为你两次初始化m的值,所以Delphi就把循环外的m的初始化给优化掉了,不需要了。你如果把循环内部的m的赋值语句注释掉,那么第一次的赋值就会被执行了。
2.因为整段代码中你的m和c都没有被使用,就是没有被用作右值赋给什么变量什么的。所以也被优化掉了
对于JVM我比较了解,但关于DELPHI的编译器哪又相关可用资源?