作者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