var   
   a :array[0..2] of Integer;
   i,j :Integer;
begin
   for i := 0 to 2 do
   begin
      a[i] :=i;
   end;
   j := a[2];
end;请问一下上面的程序怎么会不执行 j := a[2];这一步啊?
也就是说没有给j赋值
我是菜鸟
望大侠们不吝赐教

解决方案 »

  1.   

    编译器优化处理了,对于一个变量,如果在代码中公有赋值,在其他地方却不再使,编译器会自动忽略这行代码的。
    你上面的代码就是的,你只有对J赋值,然后并没有再使用J,编译器将其优化处理,因为J的是否存在对于你上面的代码运行不存在任何影响。如果要执行你可以这样:
       for i := 0 to 2 do
       begin
          a[i] :=i;
       end;
       j := a[2];
       showmessage(inttostr(j));
      

  2.   

    关键你是怎么判断没有执行这一步呢?肯定是看了j的值是多少的,发现不等于2然后才下判断的吧。但程序中并没有让你能看到j是等于多少的语句啊?你是在(这个子程序外的)其他地方看j的值的吧,其他地方的j的值当然跟这里的值结果不一样了。