作者IsMe1086 (大頭)
看板b97902HW
標題Re: [問題] 自寫的function可以輸出兩個(含)以上的 …
時間Mon Oct 13 00:55:09 2008
C++的話我知道做法
不過要用到reference的概念
我記得原理有點像是pointer吧
我用swap交換函數舉例
可以這樣寫
#include<iostream>//for cin,cout
using namespace std;//我不會解釋這一行 囧~用devC++都會習慣這樣寫
void swap(int
&,int
&);//先宣個swap這個函數,詳細運作可寫在下方
int main()
{
int x=3;
int y=5;
swap(x,y);
cout << "x=" << x << endl ;
cout << "y=" << y << endl ;
system("pause");
return 0;
}
void swap(int
&a,int
&b) //void函數不用回傳值
{
int t;
t=a;
a=b;
b=t;
return;//不需要輸入回傳值
}
他會輸出x=5
y=3
簡單的說因為妳宣告的是reference變數(在宣告型態後面加「&」)
a,b雖然在swap裡面是local variable
但是只要swap裡面a,b的值改變
外面的function有用到swap裡面的參數值也會跟著改變
這個例子應該可以讓你利用
假設你想要在int main()回傳兩個值
你就這樣做
int main()
{
....
function_name(x,y);//假設x,y已經被宣告
....
}
void function_name(int&h,int&j)
再去寫你的function code看要怎麼對h,j下手
最後一行寫return這樣就可以了 不需要回傳值
最後程式執行回到main()時x會自動變成h的值,y會自動變成j的值(型態要一樣就是了)
這樣就可以達到回傳兩個值得效果啦
================
很想知道為什麼local variable改變連外面的variable也會變的話.....
等你學到pointer(->)、記憶體位址(&)、記憶體位址所指的值(*)、bla...
恩再說吧@__@
不好意思來賺P幣的Orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 124.10.69.60
※ 編輯: IsMe1086 來自: 124.10.69.60 (10/13 01:00)
1F:推 drazi:#define &(a) (*(a)) 突然間想到的 千萬不要用 10/13 00:58
2F:推 drazi:用了會連怎麼死的都不知道........這能死的地方太多種了.. 10/13 00:58
3F:推 ming1053:一樓那什麼怪招...|| 10/13 01:01
4F:推 LoganChien:可以嗎?Macro NAME 可以是 & ? 10/13 01:02
5F:→ LoganChien:#include <utility> 10/13 01:02
6F:→ LoganChien:std::pair func(.....) 10/13 01:03
7F:→ LoganChien:return std::make_pair(number1, number2); 10/13 01:04
8F:→ LoganChien:func(...).first // first return 10/13 01:04
9F:→ LoganChien:func(...).second // second return 10/13 01:04
10F:→ LoganChien:另一個方法。^_^ 聽說 BOOST 還有 n-tuple(?) 10/13 01:05
11F:→ IsMe1086:樓上那個我就沒用過了XD 才疏學淺Orz 10/13 01:06
12F:推 LoganChien:少寫了,是 std::pair<int, int> func(.....) 10/13 01:10
13F:推 drazi:這樣會CALL幾次@@? 10/13 03:06
14F:推 drazi:噢然後我承認我的是胡鬧的...至於能不能用 來試試... 10/13 03:06
15F:推 drazi:結論是不行XD 不過改成字母就可以@@ 10/13 03:07
16F:推 LoganChien:2 次。不過你也可以這樣寫: 10/13 08:19
17F:→ LoganChien:std::pair<int, int> ret = func(.....); 10/13 08:19
18F:→ LoganChien:然後, ret.first, ret.second 10/13 08:19