全局常量数组
const
M0:array[0..8] of integer=(8,5,4,3,5,2,3,9);
M1:array[0..6] of integer=(0,7,3,9,0,5);
M2:array[0..12] of integer=(5,3,6,3,6,3,7,4,2,4,7,4);
上面数组建好后,我想在过程里跟据条件选择其中一个数组使用。
procedure TForm2.LoadLevel(e:Integer);
var MyArray //问题在这里,这个数组怎么定义下面才可以正确赋值?
begin
if e=0 then MyArray:=M0;
if e=1 then MyArray:=M1;
if e=2 then MyArray:=M2;
//这里开始使用MyArray数组了,就像直接使用M0,M1,M2数组一样。
end;现在的问题是如何定义这个MyArray数组变量,才能让下面跟据条件正常赋值?
const
M0:array[0..8] of integer=(8,5,4,3,5,2,3,9);
M1:array[0..6] of integer=(0,7,3,9,0,5);
M2:array[0..12] of integer=(5,3,6,3,6,3,7,4,2,4,7,4);
上面数组建好后,我想在过程里跟据条件选择其中一个数组使用。
procedure TForm2.LoadLevel(e:Integer);
var MyArray //问题在这里,这个数组怎么定义下面才可以正确赋值?
begin
if e=0 then MyArray:=M0;
if e=1 then MyArray:=M1;
if e=2 then MyArray:=M2;
//这里开始使用MyArray数组了,就像直接使用M0,M1,M2数组一样。
end;现在的问题是如何定义这个MyArray数组变量,才能让下面跟据条件正常赋值?
begin
SefLength(MyArray,Length(M0);
再用move或者其他方法把M0的内容放到MyArray中
end;
你说的:再用move或者其他方法把M0的内容放到MyArray中,我跟本就无从下手啊。
二:把你的数组常量作为参数传递到LoadLevel里面,然后使用low和high遍历数组元素。
好像数据转移不完整,我的数值元素有几百个,但MOVE过去的只有几十个,不知道为什么。
我认真查看了MOVE后的数组元素,认真比对原来的发现有的转移了十多个,有的二十多的,有的三十多个(主楼发贴中我是只举个例子,所以元素长度很小,实际中我的一般都要二三百个数组元素),没有规律,后面的不知道为什么不转了,全是 0 。 if e=0 then
begin
SetLength(MyArray,Length(M0));
Move(M0[0],MyArray[0],Length(M0));
end;
M0:array[0..7] of integer=(8,5,4,3,5,2,3,9);
M1:array[0..5] of integer=(0,7,3,9,0,5);
M2:array[0..11] of integer=(5,3,6,3,6,3,7,4,2,4,7,4);
var
MyArray: array of Integer;
i: Integer;
begin
if 0 = 0 then
begin
SetLength(MyArray,Length(M0));
CopyMemory(MyArray,@M0,Length(M0));
for I := Low(MyArray) to High(MyArray) do
Memo1.Lines.Add(IntToStr(M0[i]))
end;
end;
if e=0 then
begin
SetLength(MyArray,Length(M0));
//Move(M0[0],MyArray[0],Length(M0));
CopyMemory(MyArray,@M0,Length(M0));
end;
结果一样,还是只能移动前几十数组元素,认真检测后发现MOVE函数里与Length(M0)有很大关系,只要len值设置为实际数组长度的四倍多就可以显示完整了,不知道为什么于是我改为 if e=0 then
begin
SetLength(MyArray,Length(M0));
Move(M0[0],MyArray[0],Length(M0)*4+1);
end;长度乘4加1,可以显示完整了,不知道为什么。非常郁闷中。。一天后结贴,大家讨论下为什么,遇鬼了。