C++的函数交换,下面三个有什么区别?

#include<iostream>usingnamespacestd;voidswap(int,int);intmain(){inta=3,b=8;cout<<"a="... # include <iostream>
using namespace std;
void swap ( int , int ) ;
int main ()
{ int a = 3 , b = 8 ;
cout << "a = " << a << ", b = " << b << endl ;
swap ( a , b ) ;
cout <<"after swapping... \n" ;
cout << "a = " << a << ", b = " << b << endl ;
}
void swap ( int x , int y )
{ int temp = x ;
x = y ;
y = temp ;
}

————————————————————
# include <iostream>
using namespace std;
void swap ( int & , int & ) ;
int main ()
{ int a = 3 , b = 8 ;
cout << "a = " << a << ", b = " << b << endl ;
swap ( a , b ) ;
cout <<"after swapping... \n" ;
cout << "a = " << a << ", b = " << b << endl ;
}
void swap ( int & x , int & y )
{ int temp = x ;
x = y ;
y = temp ;
}

——————————————————————————————

# include <iostream>
using namespace std;
void swap ( int * , int * ) ;
int main ()
{ int a = 3 , b = 8 ;
cout << "a = " << a << ", b = " << b << endl ;
swap ( &a , &b ) ;
cout <<"after swapping... \n" ;
cout << "a = " << a << ", b = " << b << endl ;
}
void swap ( int * x , int * y )
{ int temp = * x ;
* x = * y ;
* y = temp ;
}
展开
 我来答
百度网友d093dbf
2012-12-05 · TA获得超过267个赞
知道小有建树答主
回答量:350
采纳率:60%
帮助的人:159万
展开全部
第一个是传值,a,b,只是作为形参传过去,这样把a的给了x,把b的值给了y。a,b还是原来的值,而x,y的值也会在swap运行结束后释放。以下两个是传地址,传引用。把存储a,b,的具体地址传过去了,在交换的时候具体参与了交换。能实现真的交换。按值传递不能进行真的交换,其余两种可以实际交换。
追问
int & x 不是引用吗?那那为什么函数内部处理的就是a,b?
追答
可是说是引用,它传的具体的地址,就是a,b,在内存中的地址,所以被操作的实际上就是最开始的a和b.
6fone
2012-12-05 · TA获得超过804个赞
知道小有建树答主
回答量:631
采纳率:33%
帮助的人:539万
展开全部
void swap ( int x , int y )按值传递,在调用时会对实参创建一个复本,函数内部处理的是复本x,y,不是a,b

void swap ( int & x , int & y )和void swap ( int * x , int * y )是函数内部处理的就是a,b
追问
int & x 不是引用吗?那么怎么会改变?
追答
引用时对原来的引用,就类似传递指针呀
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2012-12-05 · TA获得超过6806个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1614万
展开全部
函数参数的按值传递和按引用传递应该很多书都会介绍吧……
追问
今晚老师讲了,不懂!麻烦详细解答!
追答
若函数声明为void  swap ( int   ,   int    ) ;调用swap ( a , b ) ;时,实际上是复制了一份a和 b传给swap,swap函数修改的不是原来的 a , b ,而只是 a , b 的复制品,因为要复制一份a和 b,所以耗时较长。
若函数声明为void swap ( int & , int & ) ;调用swap ( a , b ) ;时,传递的是a和 b的引用,swap函数通过修改 a , b 的引用的值,修改了原来的 a , b 的值。

若函数声明为void swap ( int * , int * ) ;调用swap ( &a , &b ) ;时,传递的是a和 b的地址,swap函数通过对指向 a , b 的指针解引用,修改了原来的 a , b 的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻想东方
2012-12-06 · TA获得超过132个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:80.7万
展开全部
楼上的都很对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式