首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

用Copy拷贝动态数组的有关问题

2012-02-04 
用Copy拷贝动态数组的问题。问题如下:两个动态数组,array1,array2:array of integer长度分别为30和20,用co

用Copy拷贝动态数组的问题。
问题如下:
两个动态数组,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 for

end.
----------------
原来array1的值是0~29,拷贝完后,array1的值为0~9,元素的值根本没变,请问这是为什么?

[解决办法]
使用CopyMemory吧!
copyMemory(@arr1[0],@arr2[0],长度);
[解决办法]
array1:=Copy(array2,0,10);//拷贝数组 

改成:
Move (array2[0], array1[0], 10 * Sizeof(Integer));

[解决办法]
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. 

[解决办法]
楼上的已经说完了,现总结一下
方法有三种:
1.copy
2.move
3.copymemory
[解决办法]
用move来操作数组方便

热点排行