我想实现将两个一维数组合并成一个二维数组,我写了下面的东西:
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

解决方案 »

  1.   

    function matrixtwo(a,b:array of real):array of array of real;
    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数组吧.
      

  2.   

    注意:函数是不能返回数组的!!!!!!注意:函数是不能返回数组的!!!!!!
    注意:函数是不能返回数组的!!!!!!注意:函数是不能返回数组的!!!!!!
    不过可以返回指针,如下:
    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;
      

  3.   

    数组可以作为函数的返回值,你这里最好用动态数组返回吧.如下
    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;
      

  4.   

    type
      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;