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;