Re: [問題] 自寫的function可以輸出兩個(含)以上的 …

看板b97902HW作者 (大頭)時間15年前 (2008/10/13 00:55), 編輯推噓9(909)
留言18則, 4人參與, 最新討論串1/1
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)

10/13 00:58, , 1F
#define &(a) (*(a)) 突然間想到的 千萬不要用
10/13 00:58, 1F

10/13 00:58, , 2F
用了會連怎麼死的都不知道........這能死的地方太多種了..
10/13 00:58, 2F

10/13 01:01, , 3F
一樓那什麼怪招...||
10/13 01:01, 3F

10/13 01:02, , 4F
可以嗎?Macro NAME 可以是 & ?
10/13 01:02, 4F

10/13 01:02, , 5F
#include <utility>
10/13 01:02, 5F

10/13 01:03, , 6F
std::pair func(.....)
10/13 01:03, 6F

10/13 01:04, , 7F
return std::make_pair(number1, number2);
10/13 01:04, 7F

10/13 01:04, , 8F
func(...).first // first return
10/13 01:04, 8F

10/13 01:04, , 9F
func(...).second // second return
10/13 01:04, 9F

10/13 01:05, , 10F
另一個方法。^_^ 聽說 BOOST 還有 n-tuple(?)
10/13 01:05, 10F

10/13 01:06, , 11F
樓上那個我就沒用過了XD 才疏學淺Orz
10/13 01:06, 11F

10/13 01:10, , 12F
少寫了,是 std::pair<int, int> func(.....)
10/13 01:10, 12F

10/13 03:06, , 13F
這樣會CALL幾次@@?
10/13 03:06, 13F

10/13 03:06, , 14F
噢然後我承認我的是胡鬧的...至於能不能用 來試試...
10/13 03:06, 14F

10/13 03:07, , 15F
結論是不行XD 不過改成字母就可以@@
10/13 03:07, 15F

10/13 08:19, , 16F
2 次。不過你也可以這樣寫:
10/13 08:19, 16F

10/13 08:19, , 17F
std::pair<int, int> ret = func(.....);
10/13 08:19, 17F

10/13 08:19, , 18F
然後, ret.first, ret.second
10/13 08:19, 18F
文章代碼(AID): #18yYlkVo (b97902HW)