问题如下:
两个动态数组,array1,array2:array of integer;长度分别为30和20,用copy把array2的前10个元素拷贝给array1。但结果只是array1的长变为10了,元素的值没有变,请问这是怎么回事?
----------
代码:
implementation
var
  array1,array2:array of integer;//定义两个动态数组{$R *.dfm}procedure TForm1.RzBitBtn1Click(Sender: TObject);
var
  i:integer;
begin
  SetLength(array1,30);//把array1的长度设为30  
  SetLength(array2,20);//把array1的长度设为20  for i:=Low(array1)to High(array1)do//初始化数组
  begin
    array1[i]:=i;
    RzListBox1.Items.Add('array1['+IntToStr(i)+' ]: '+IntToStr(array1[i]));
  end;//end for  RzListBox1.Items.Add('----------------------------------');  for i:=Low(array2)to High(array2)do//初始化数组2
  begin
    array2[i]:=1;
    RzListBox1.Items.Add('array2['+IntToStr(i)+']: '+IntToStr(array2[i]));
  end;  array1:=Copy(array2,0,10);//拷贝数组
  for i:=Low(array1)to High(array1)do//把拷贝完的数组显示出来
  begin
    array1[i]:=i;
    RzListBox1.Items.Add('array1['+IntToStr(i)+' ]: '+IntToStr(array1[i]));
  end;//end forend.
----------------
原来array1的值是0~29,拷贝完后,array1的值为0~9,元素的值根本没变,请问这是为什么?

解决方案 »

  1.   

    使用CopyMemory吧!
      copyMemory(@arr1[0],@arr2[0],长度);
      

  2.   

    array1:=Copy(array2,0,10);//拷贝数组 改成:
    Move (array2[0], array1[0], 10 * Sizeof(Integer));
      

  3.   

    procedure TForm1.RzBitBtn1Click(Sender: TObject); 
    var 
      i:integer; 
    begin 
      SetLength(array1,30);//把array1的长度设为30   
      SetLength(array2,20);//把array1的长度设为20   for i:=Low(array1)to High(array1)do//初始化数组 
      begin 
        array1[i]:=i; 
        RzListBox1.Items.Add('array1['+IntToStr(i)+' ]: '+IntToStr(array1[i])); 
      end;//end for   RzListBox1.Items.Add('----------------------------------');   for i:=Low(array2)to High(array2)do//初始化数组2 
      begin 
        array2[i]:=1; 
        RzListBox1.Items.Add('array2['+IntToStr(i)+']: '+IntToStr(array2[i])); 
      end; 
      ///****从以上代码分析, array1,array2的前20个元素相等!  array1:=Copy(array2,0,10);///****此行代码重新分配了内存同时从array2拷贝前10个元素,array1指向这个新的数组
      for i:=Low(array1)to High(array1)do//把拷贝完的数组显示出来 
      begin 
        array1[i]:=i; 
        RzListBox1.Items.Add('array1['+IntToStr(i)+' ]: '+IntToStr(array1[i])); 
      end;//end for end. 
      

  4.   

    楼上的已经说完了,现总结一下
    方法有三种:
    1.copy
    2.move
    3.copymemory