作业帮 > 综合 > 作业

C++函数的传值调用,将两个数交换

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/15 00:46:46
C++函数的传值调用,将两个数交换
我写的程序如下:
但运行后的结果是 x=7 y=11
两个数并没有交换位置
#include
using namespace std;
void swap(int &a,int &b)
{int t;
t=a;a=b;b=t;
}
void main()
{int x=5,y=6;
swap(x,y);
cout
C++函数的传值调用,将两个数交换
问:但为什么倒数第二行的swap(x,y);不改为swap(&x,&y);与调用函数对应呢
答:比如一个函数定义为void func(a); 那我们可以这样调用 void func(b)对吧?实际上函数在堆栈上创建了一个临时的变量a 在函数入口处实际上相当与执行了 a=b;这样一条f赋值语句,因为创建了临时变量 所以这也是为什么你一开始两个数没有交换的原因 因为他们交换的是临时变量 函数结束后变量就没有了
如果一个函数定义为void func(int & a);调用的时候可以这样写void func(b)
同样执行了 一个int &b = a;这样的一条语句 所以不会错的 定义了一个引用变量b 引用的是a的值 所以swap就成功交换了 如果调用的时候写成void func(&b) 这个时候相当于 a = &b;也就是传给a的是b的地址 这种情况对应于函数参数是指针的情况 如 void func(int *p)明白了吗?显示错误 我就不知道怎么回事了