我想直接用CopyMemory直接拷贝两个独立的动态数组,不想用循环,一维的数组可以,二维的就是不行,不知该如何是好。
以下是我的代码:procedure TForm1.Button2Click(Sender: TObject);
var
A1,A2:array of array of Double;
begin
SetLength(A1,3,3);
SetLength(A2,3,3);
A1[0,0]:=1;
A1[1,0]:=2;
A1[2,0]:=3; A1[0,1]:=4;
A1[1,1]:=5;
A1[2,1]:=6; A1[0,2]:=7;
A1[1,2]:=8;
A1[2,2]:=9; //CopyMemory(A2,A1,9*SizeOf(Double));这一句好象可以,但发现A2,A1不独立
CopyMemory(@A2[0,0],@A1[0,0],9*SizeOf(Double));
//这一句好象等同于CopyMemory(@A2[0,0],@A1[0,0],3*SizeOf(Double)); 只拷贝了一部分 //只能采用以下几句,通过,但是太繁琐了,能不能一句话实现呢?
//CopyMemory(@A2[0,0],@A1[0,0],3*SizeOf(Double));
//CopyMemory(@A2[1,0],@A1[1,0],3*SizeOf(Double));
//CopyMemory(@A2[2,0],@A1[2,0],9*SizeOf(Double)); //A2[0,0]:=11;
//A2[1,0]:=12;
//A2[2,0]:=13; //A2[0,1]:=14;
//A2[1,1]:=15;
//A2[2,1]:=16; //A2[0,2]:=17;
//A2[1,2]:=18;
//A2[2,2]:=19; Label1.Caption:=floattostr(A2[0,0]);
Label2.Caption:=floattostr(A2[1,0]);
Label3.Caption:=floattostr(A2[2,0]); Label4.Caption:=floattostr(A2[0,1]);
Label5.Caption:=floattostr(A2[1,1]);
Label6.Caption:=floattostr(A2[2,1]); Label7.Caption:=floattostr(A2[0,2]);
Label8.Caption:=floattostr(A2[1,2]);
Label9.Caption:=floattostr(A2[2,2]);
end;
以下是我的代码:procedure TForm1.Button2Click(Sender: TObject);
var
A1,A2:array of array of Double;
begin
SetLength(A1,3,3);
SetLength(A2,3,3);
A1[0,0]:=1;
A1[1,0]:=2;
A1[2,0]:=3; A1[0,1]:=4;
A1[1,1]:=5;
A1[2,1]:=6; A1[0,2]:=7;
A1[1,2]:=8;
A1[2,2]:=9; //CopyMemory(A2,A1,9*SizeOf(Double));这一句好象可以,但发现A2,A1不独立
CopyMemory(@A2[0,0],@A1[0,0],9*SizeOf(Double));
//这一句好象等同于CopyMemory(@A2[0,0],@A1[0,0],3*SizeOf(Double)); 只拷贝了一部分 //只能采用以下几句,通过,但是太繁琐了,能不能一句话实现呢?
//CopyMemory(@A2[0,0],@A1[0,0],3*SizeOf(Double));
//CopyMemory(@A2[1,0],@A1[1,0],3*SizeOf(Double));
//CopyMemory(@A2[2,0],@A1[2,0],9*SizeOf(Double)); //A2[0,0]:=11;
//A2[1,0]:=12;
//A2[2,0]:=13; //A2[0,1]:=14;
//A2[1,1]:=15;
//A2[2,1]:=16; //A2[0,2]:=17;
//A2[1,2]:=18;
//A2[2,2]:=19; Label1.Caption:=floattostr(A2[0,0]);
Label2.Caption:=floattostr(A2[1,0]);
Label3.Caption:=floattostr(A2[2,0]); Label4.Caption:=floattostr(A2[0,1]);
Label5.Caption:=floattostr(A2[1,1]);
Label6.Caption:=floattostr(A2[2,1]); Label7.Caption:=floattostr(A2[0,2]);
Label8.Caption:=floattostr(A2[1,2]);
Label9.Caption:=floattostr(A2[2,2]);
end;
CopyMemory(@A2[0,0],@A1[0,0],9*2*4);
如@A1[0,0]、@A1[0,1]、@A1[0,2]是连续的,但接下来的@A1[1,0]并不是接着@A1[0,2],
所以只能一行行CopyMemory了。
如果不是维数固定的话可以先的到a1的地址(注:动态数组a1与a1[0,0]的地址是不同的)
从这个地址读取一个地址,该指针指向一个地址数组的地址,该数组以1E000000结尾。
地址数组的每一个地址就是每一维数组的地址。
通过获得这些地址就代入CopyMemory就可以拷贝对应维的数组。
如果不是维数固定的话可以先的到a1的地址(注:动态数组a1与a1[0,0]的地址是不同的)
从这个地址读取一个地址,该地址是一个地址数组的地址,该数组以1E000000结尾。
地址数组的每一个地址就是每一维数组的地址。
通过获得这些地址就代入CopyMemory就可以拷贝对应维的数组。