你这两个数组的类型都不相等呀 你看看下面的这种写法可能行 TYPE FF=array [0..7500] of single; Var D: FF; ... ComputeED(E,D,l-1); ... procedure ComputeED(Const EArr:FF; DArr:FF;len:integer); var i:integer; total:single; begin total:=0.0; for i:=0 to len do total:=total+EArr[i]; total:=total/(len+1); for i:=0 to len do DArr[i]:=(EArr[i]-total)*(EArr[i]-total); end;
我没说清楚,EArr和DArr定义的时候都是array[0..7499] of single;应该没有类型不相等的问题吧
procedure ComputeED(Const EArr: array of single; DArr:array of single;len:integer); var i:integer; total:single; begin total:=0.0; for i:=0 to len do total:=total+EArr[i]; total:=total/(len+1); for i:=0 to len do DArr[i]:=(EArr[i]-total)*(EArr[i]-total); end;你给Darr分配内存了吗?
procedure ComputeED(Const EArr: array of single; DArr:array of single;len:integer);改为 procedure ComputeED(Const EArr: array of single;var DArr:array of single;len:integer); 应该可以的嘛
谢谢cplusc,问题解决了,可是为什么要加var呢?
用Setlength,只能分配0到256, 那是对string类型,对 array of ..类型,无限 但你不是说 EArr和DArr定义的时候都是array[0..7499] of single; 不应该用Setlength
你看看下面的这种写法可能行
TYPE
FF=array [0..7500] of single;
Var
D: FF;
...
ComputeED(E,D,l-1);
...
procedure ComputeED(Const EArr:FF; DArr:FF;len:integer);
var
i:integer;
total:single;
begin
total:=0.0;
for i:=0 to len do
total:=total+EArr[i];
total:=total/(len+1);
for i:=0 to len do
DArr[i]:=(EArr[i]-total)*(EArr[i]-total);
end;
var
i:integer;
total:single;
begin
total:=0.0;
for i:=0 to len do
total:=total+EArr[i];
total:=total/(len+1);
for i:=0 to len do
DArr[i]:=(EArr[i]-total)*(EArr[i]-total);
end;你给Darr分配内存了吗?
procedure ComputeED(Const EArr: array of single;var DArr:array of single;len:integer);
应该可以的嘛
但你不是说 EArr和DArr定义的时候都是array[0..7499] of single;
不应该用Setlength
..
a : 变量形参, 和实参共享存储单元