当前位置:编程学习 > C/C++ >>

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

我写的程序如下:
===========================================
#include <iostream>
using namespace std;
void swap(int a,int b)
{int t;
t=a;a=b;b=t;

}
void main()
{int x=7,y=11;
cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y);
cout<<"after swap:"<<endl;
cout<<"x="<<x<<"y="<<y<<endl;
}
=============================================
但运行后的结果是 x=7 y=11
两个数并没有交换位置
求高人解答
答案:问:但为什么倒数第二行的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)明白了吗?显示错误 我就不知道怎么回事了

上一个:学习C++语言买什么书全面点?
下一个:c++中!a&&b++&&++c?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,