用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来操作数组方便