procedure TForm1.Button1Click(Sender: TObject);
var array1:array[1..52] of integer;
         a:array[1..13] of integer;
         i:integer;
begin
 for i:=1 to 52 do
 array1[i]:=i
for i:=1 to 52 do
a[i]:=array1[i];
showmessage(inttostr(array1[1]));
end;你们不调试程序看看array1[1]结果是什么

解决方案 »

  1.   

    我跟踪了一下,很奇怪...var array1:array[1..52] of integer;
        dsa:array[1..13] of integer;
             i:integer;
    begin
      for i:=1 to 52 do
        array1[i]:=i;
      i:=100;  <--------这句不执行
      for i:=1 to 52 do  <-------这里i的初始值为 52
        dsa[i]:=array1[1];  <------- 如果改为这样, Array1[1]的值才不变
      showmessage(inttostr(array1[1]));
      

  2.   

    加点注释你就明白了
    procedure TForm1.Button1Click(Sender: TObject);
    var array1:array[1..52] of integer;
             a:array[1..13] of integer;
             i:integer;
    begin
       showmessage(inttostr(integer(@a[1])));
       showmessage(inttostr(integer(@array1[1])));{         a[1],a[2].....a[13],array1[1].....array1[52]
    地址:     2296 2300     2344  2348
                             |
           循环中移动指针而不判断越界
           指针到2304后继续移动39*4,2348地址处的数据被覆盖=14就是array1}  for i:=1 to 52 do
        array1[i]:=i;
      for i:=1 to 52 do
      begin
        a[i]:=array1[i];
      end;
      showmessage(inttostr(array1[1]));
    end;
      

  3.   

    for i:=1 to 52 do
        array1[i]:=i;
      i:=100;  <--------这句不执行
      for i:=1 to 52 do  <-------这里i的初始值为 52
        dsa[i]:=array1[1];  <------- 如果改为这样, Array1[1]的值才不变
      showmessage(inttostr(array1[1]));========不行的那句编译器自己优化的时候扔了吧,在后面加showmessage(inttostr(i))就可以了循环中第一次不是52!!是1,到循环里面跟踪
      

  4.   

    偶看明白了,你的意思是说array1和a它们是一组连续的地址单元当a地址越界时array1[14]指向a[14]而a[14]正好是array1[1]所指的单元所以造成array1[1]值被array1[14]替代
      

  5.   

    for i:=1 to 52 do
        array1[i]:=i;
      i:=100;  <--------这句不执行
      for i:=1 to 52 do  <-------这里i的初始值为 52
        dsa[i]:=array1[1];  <------- 如果改为这样, Array1[1]的值才不变
      showmessage(inttostr(array1[1]));========不行的那句编译器自己优化的时候扔了吧,在后面加showmessage(inttostr(i))就可以了循环中第一次不是52!!是1,到循环里面跟踪========================================================我跟踪到第二个for时, i是递减的,初始为52。 估计也是编译器优化的。