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 ;
} 展开
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 ;
} 展开
4个回答
展开全部
第一个是传值,a,b,只是作为形参传过去,这样把a的给了x,把b的值给了y。a,b还是原来的值,而x,y的值也会在swap运行结束后释放。以下两个是传地址,传引用。把存储a,b,的具体地址传过去了,在交换的时候具体参与了交换。能实现真的交换。按值传递不能进行真的交换,其余两种可以实际交换。
追问
int & x 不是引用吗?那那为什么函数内部处理的就是a,b?
追答
可是说是引用,它传的具体的地址,就是a,b,在内存中的地址,所以被操作的实际上就是最开始的a和b.
展开全部
void swap ( int x , int y )按值传递,在调用时会对实参创建一个复本,函数内部处理的是复本x,y,不是a,b
void swap ( int & x , int & y )和void swap ( int * x , int * y )是函数内部处理的就是a,b
void swap ( int & x , int & y )和void swap ( int * x , int * y )是函数内部处理的就是a,b
追问
int & x 不是引用吗?那么怎么会改变?
追答
引用时对原来的引用,就类似传递指针呀
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数参数的按值传递和按引用传递应该很多书都会介绍吧……
追问
今晚老师讲了,不懂!麻烦详细解答!
追答
若函数声明为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 的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的都很对。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询