delphi里function怎么返回多个值呢? Delphi / Windows SDK/API http://www.delphi2007.net/DelphiBase/html/delphi_20061206210840253.html
我自己写了一个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;
强烈鄙视问题解决后不结贴的人! 强烈鄙视技术问题解决后把贴子转移到非技术区的人! 鄙视你们! http://community.csdn.net/Expert/topic/5216/5216675.xml?temp=.9262659
函数 怎么能 返回多个值呢?
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;
|
请发表评论