delphi里function怎么返回多个值呢? Delphi / Windows SDK/APIhttp://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;