我想实现将两个一维数组合并成一个二维数组,我写了下面的东西:
function matrixtwo(a,b:array of real):array of real//a,b是两个一维数组
var c:variant;
m,i:integer;
begin
m:=max(length(a),length(b));
c:=vararraycreate([1,2,1,m],variant);
for i:=1 to m do c[1,i]:=a;//关键是这个地方是不是错了啊
for i:=1 to m do c[2,i]:=b;
return:=c;//还有这里返回一个实型数组可以么?
end
function matrixtwo(a,b:array of real):array of real//a,b是两个一维数组
var c:variant;
m,i:integer;
begin
m:=max(length(a),length(b));
c:=vararraycreate([1,2,1,m],variant);
for i:=1 to m do c[1,i]:=a;//关键是这个地方是不是错了啊
for i:=1 to m do c[2,i]:=b;
return:=c;//还有这里返回一个实型数组可以么?
end
var
c:variant;
m,n,x,i:integer;
begin
m:=length(a);
n:=length(b);
x:=Max(m,n);
c:=vararraycreate([1,2,1,x],variant);
for i:=1 to m do c[1,i]:=a[i];//关键是这个地方是不是错了啊
for i:=1 to n do c[2,i]:=b[i];
return:=c;//还有这里返回一个实型数组可以么?
end;
至于return可能不能这么写,你试试把c创建成real数组吧.
注意:函数是不能返回数组的!!!!!!注意:函数是不能返回数组的!!!!!!
不过可以返回指针,如下:
function ff: pointer;
var
i:integer;
cc[1..5]:arry of char;
begin
for i:=1 to 5 do
cc[i]:=chr(i+40);
result:=@cc;
end;
function matrixtwo(a,b:array of real):array of array of real;
var
c:variant;
m,n,i:integer;
begin
m:=length(a);
n:=length(b);
setLength(result,2);
setLength(result[0],m);
setLength(result[1],n);
for i:=1 to m do result[0,i]:=a[i];
for i:=1 to n do result[1,i]:=b[i];
end;
TAA = array of array of real; //最好定义这个,或者用variant类型来返回值procedure matrixtwo(a,b: array of real; var c: TAA);
var
i, j: integer;
begin
SetLength(c, 2);
SetLength(c[0], Length(a));
j := 0;
for i := low(a) to high(a) do //for i := 1 to m do是错误的,看下面的调用例子你就知道了
begin
c[0][j] := a[i];
j := j + 1;
end; SetLength(c[1], Length(b));
j := 0;
for i := low(b) to high(b) do
begin
c[1][j] := a[i];
j := j + 1;
end;
end;调用例子:
procedure TForm1.Button1Click(Sender: TObject);
var
c: TAA;
a: array[1..4] of real;
b: array[2..4] of real;
begin
a[1] := 1; a[2] := 2; a[3] := 3; a[4] := 4;
b[2] := 2; b[3] := 3; b[4] := 4;
matrixtwo(a, b, c);
showmessage(floattostr(c[0][0]));
end;