我自己写了一个function,要想同时返回三个double类型的数值,请问怎么实现呢?

解决方案 »

  1.   

    用引用做为参数。如:function abc(var aa,bb,cc:double):double;//共相当于返回4个double值
    begin
      aa:=......
      bb:=......
      cc:=.....
      result:=......
    end;
    //---------------------------------------------
    ...以下是调用
    var
      aatrue,bbtrue,cctrue,ddtrue:double;
    begin
      aatrue:=...
      bbtrue:=...
      cctrue:=...
      ddtrue:=abc(aatrue,bbtrue,cctrue);
    end;
    //仓促写的,没有用大小写母,不好看,见谅
      

  2.   

    我测试的结果:function abc(var aa,bb,cc:double):double;//共相当于返回4个double值
    begin
      aa:=12.6;
      bb:=88.89;
      cc:=2345.907;
      result:=aa+bb+cc;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      aatrue,bbtrue,cctrue,ddtrue:double;
    begin
      aatrue:=0.0;
      bbtrue:=0.0;
      cctrue:=0.0;
      ddtrue:=abc(aatrue,bbtrue,cctrue);
      memo1.Lines.Add('以下是四个变量新值:'+floattostr(aatrue)+','+floattostr(bbtrue)+','+floattostr(cctrue)+','+floattostr(ddtrue));
    end;结果:
    12.6,88.89,2345.907,2447.397
      

  3.   

    result返回什么啊?
    能写具体点吗?那三个返回值我是想分别得到的.
      

  4.   

    那如果我没有传递参数呢?C_LT_L,C_LA_B,C_HI_H三个参数都是类里的公共变量,现在想用这个函数来获得这三个变量
    function THHUCoord.GetParams();
    begin
      C_LT_L;
      C_LA_B;
      C_HI_H;
    end;
      

  5.   

    要么就用var
    要么就返回一个记录(结构体)
      

  6.   

    type IWantData = record
    aa:...;
    bb:...;
    cc:...;
    end;function abc(var aa,bb,cc:double):IWantData ;//共相当于返回3个double值
    var
      ret: IWantData;
    begin
    ret.aa:=......;
    ret.bb:=......;
    ret.cc:=.....;
    result:=ret;
    end;
      

  7.   

    强烈鄙视问题解决后不结贴的人!
    强烈鄙视技术问题解决后把贴子转移到非技术区的人!
    鄙视你们!http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659
      

  8.   

    To 楼上:type
        TTwo = record
        x : String;
        y : String;
        z : String;
    end;Procedure FunOne(var a,b,c :integer); //传址(引用、别名)
    begin
       a := 9; //给三个变量赋值
       b := 8;
       c := 7;
    end;function FunTwo(InStr :string) :TTwo;      //返回记录
    var tempRec :TTwo;
    begin
        temp.x := copy(InStr,1,1);
        temp.y := copy(InStr,2,1);
        temp.z := copy(InStr,3,1);
        result := tempRec;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
       a,b,c : integer;
       InStr : String;
    begin
       a := 0;//初值
       b := 0;
       c := 0;
       funOne(a,b,c);
       //测试经FunOne处理后(相当于“返回”)的a,b,c值变为9,8,7
       showmessage(inttostr(a)+','+inttostr(b)+','+inttostr(c));   InStr := 'xyz';
       //测试FunTwo()返回的3个记录成员值 x,y,z
       showmessage(FunTwo(InStr).x+','+FunTwo(InStr).y+','+FunTwo(InStr).z);
    end;//上面两种方法,如果说第一种用“引用”做参数的方法只是相当于返回多值的话,那第二种,用记录,则是真正返回多值
      

  9.   

    temp.x   改为  tempRec.x
    temp.y   改为  tempRec.y
    temp.z   改为  tempRec.z
      

  10.   

    var xxx; 不是已经可以解决了吗?
      

  11.   

    谢谢。
    的确实现了, 多个值的改动。------------------
    不过, 钻牛角的话, 这算不得 “返回多个值”的,传地址调用的时候,只能说是,改变了 3 个值, 而只返回了 1 个变量 的
    返回结构体,也是一个变量的,只是这个变量还是一个结构体??
    不知道 Dephi  或 别的语言中, 有没有真正 返回多个值 的
      

  12.   

    Delphi已经够NB了,函数可以返回任意类型。
    你试试C++,很多类型必须要明确使用指向类型的指针才能作为函数的返回值。
      

  13.   

    函数和过程其实是一样的,都不存在返回值的问题!
    只是为了方便给一个返回值而已。
    最后都是指针;
    还是用VAR吧!
      

  14.   

    还有一个方法真的可以返回一个ARRAYfunction  Mytest(......):OleVariant;
    begin
      Result:=VarArrayCreate([0,2],varInteger);
      Result[0] := 0;
      Result[1] := 1;
      Result[2] := 2;
    end;
      

  15.   

    或者是定义一个类型
    TmyType = array [0..2] of integer;
    function myText(...):TmyType;
    begin
      Result[0] := 1;
      result[1] := 1;
      result[2] := 0;
    end;