数组可变大小的问题:
假设要处理的point(x,y)有5个,
设置固定大小数组
thepoint :array[0..4] of tpoint;
然后赋值,得到数组每个元素的值,然后进行相关运算
没有问题,可以得到正确的结果
但如果将数组定义为可变大小:
thepoint :array of tpoint;
setlength(thepoint,5);
再对数组元素赋值,进行相关运算,问题来了,
经过多次调试,发现问题极有可能出在可变数组的定义上,但不知如何解决
假设要处理的point(x,y)有5个,
设置固定大小数组
thepoint :array[0..4] of tpoint;
然后赋值,得到数组每个元素的值,然后进行相关运算
没有问题,可以得到正确的结果
但如果将数组定义为可变大小:
thepoint :array of tpoint;
setlength(thepoint,5);
再对数组元素赋值,进行相关运算,问题来了,
经过多次调试,发现问题极有可能出在可变数组的定义上,但不知如何解决
procedure TForm1.Button1Click(Sender: TObject);
var
tp :array of TPoint;
begin
SetLength(tp,5);
tp[0].X := 0;
tp[0].Y := 0;
tp[1].X := 100;
tp[1].Y := 100;
tp[2].X := 100;
tp[2].Y := 200;
tp[3].X := 200;
tp[3].Y := 300;
tp[4].X := 600;
tp[4].Y := 600; self.Canvas.TextOut(tp[3].X, tp[2].Y, 'season');
end;
在固定大小数组里面给point赋值是这样做的:
thepoint[0]:=point(181,147);
thepoint[1]:=point(182,178);
thepoint[2]:=point(238,173);
thepoint[3]:=point(241,144);
thepoint[4]:=point(221,100);
而在可变大小里面给point赋值是这样做的:
j :=0;
for i :=0 to m do //m 已经算出来,等于4
begin
thepoint[i] :=point(a[j],a[j+1]);//其中a为整型数组
j :=j+1;
end;
赋值后得到的thepoint[i]数组元素的值和上面一样
但后续的处理结果不相同
begin
SetLength(PntArr,1);//现在可以放一个TPoint;
//.................
SetLength(PntArr,inc(High(PntArr))//现在可以多放一个元素了。
for i:=Low(PntArr)to High(PntArr) do //安全访问,不担心会越界
begin
PntArr[i]:=Point();//////
end;
end;