问题如下:
两个动态数组,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,元素的值根本没变,请问这是为什么?
两个动态数组,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,元素的值根本没变,请问这是为什么?
copyMemory(@arr1[0],@arr2[0],长度);
Move (array2[0], array1[0], 10 * Sizeof(Integer));
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