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

我写的程序如下:===========================================#include<iostream>usingnamespacest... 我写的程序如下:
===========================================
#include <iostream>
using namespace std;
void swap(int a,int b)
{int t;<br> t=a;a=b;b=t;<br> <br>}
void main()
{int x=7,y=11;<br> cout<<"x="<<x<<"y="<<y<<endl;<br> swap(x,y);<br> cout<<"after swap:"<<endl;<br> cout<<"x="<<x<<"y="<<y<<endl;<br> }
=============================================
但运行后的结果是 x=7 y=11
两个数并没有交换位置
求高人解答
展开
 我来答
匿名用户
2013-09-12
展开全部
问:但为什么倒数第二行的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)明白了吗?显示错误 我就不知道怎么回事了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式