Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1266954
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-04-22 11:00:58



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

用引用做为参数。如:  
   
  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;  
  //仓促写的,没有用大小写母,不好看,见谅

我测试的结果:  
   
  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

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

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

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

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;

强烈鄙视问题解决后不结贴的人!  
  强烈鄙视技术问题解决后把贴子转移到非技术区的人!  
  鄙视你们!  
   
 

函数   怎么能   返回多个值呢?  
   
 

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;  
   
  //上面两种方法,如果说第一种用“引用”做参数的方法只是相当于返回多值的话,那第二种,用记录,则是真正返回多值

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

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

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

这种问题有什么意义吗?

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

认同楼上两层所说

最简单的方法,定义几个全局变量,在函数里赋值,在别处引用,当然,弊端不用我说,是很多的,我个人不推荐这么写,但是确实很简单

楼上的,你让别人用你的办法,还是不用你的办法啊?  
   
  :)

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

怎么不能结贴啊

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

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



--------------------------
新闻:大脑推客:通过电脑思考即可发布Twitter消息
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(2216) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~