procedure TForm1.Button1Click(Sender: TObject);
var
  a1,a2:array of array of single;
  i:integer;
begin
  setlength(a1,3);
  for I:=0 to 2 do
  begin
    setlength(a1[i],3);
  end;
  a1[1,1]:=5;
  a2:=copy(a1);
  a2[1,1]:=3;
  showmessage(floattostr(a2[1,1])); //显示3
end;
procedure TForm1.Button3Click(Sender: TObject);
var
  A, B: array of single;
begin
  SetLength(A, 3);
  A[1] := 1;
  B := Copy(A);
  B[1] := 2;
  showmessage(floattostr(a[1]));//显示1
end;
为什么一维数组,使用Copy后,对一个数组修改,不会影响另外一个数组。而2维数组就影响。
另外。如何使2维数组想一维数组一样,一次把所有的值复制过去。

解决方案 »

  1.   

    showmessage(floattostr(a2[1,1])); 这句什么意思?你本来就是显示A2[1,1]的值
      

  2.   

    这里写错了。应该写:  showmessage(floattostr(a1[1,1]));
    这里不管是a1还是a2都是显示3。
      

  3.   

    不简单了,哈哈,偶也不知道了 
    按照D5开发指南里的说法,如果使用 A2:=A1,那么改变任何一个数组会对另外数组有影响,使用COPY应该没什么影响啊。
      

  4.   

    对于二维数组,COPY第一维,因为它的元素还是数组,实际是COPY了动态数组。
    效果同于: a2[0]:=a1[0];a2[1] := a1[1]...; 这样做实际上使a2[1]与a1[1]成了同一个东西。所以a2[1,1]与a1[1,1]相同就不奇怪了。
      

  5.   

    ahjoe(强哥) 
    你确定COPY是执行了你说的操作?
    我都说了,在D5开发指南里,说COPY只执行了拷贝,2个数组并没有关联
    只有使用了
    类似A:=B的时候,才有了关联那么如何可以使二维数组。一次把所有的值都复制过去。
    COPY,A1:=B1都行啊
      

  6.   

    对于2维数组来说,copy和a1:=b1并没有把值复制过去,只是把2个数组建立了关联。
    我想让他们变成两个数组,这样可以保留原来数组中的内容。
      

  7.   

    可以看一下dynarraycopy的帮助,该函数应该是只能操作1维动态数组,现在你需要给多维数组赋值,可以在你的代码中加入如下语句
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a1,a2:array of array of single;
      i:integer;
    begin
      setlength(a1,3);
      for I:=0 to 2 do
      begin
        setlength(a1[i],3);
      end;
      a1[1,1]:=5;
    -----------------------------------
      setlength(a2,length(a1));
    -----------------------------------  
      a2[1]:=copy(a1[1]);
      a2[1,1]:=3;  showmessage(floattostr(a1[1,1])); 
      结果显示5
    end;