
===========================================
#include
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="<
cout<<"after swap:"<
=============================================
但运行后的结果是 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<
这个程序是正确的
但为什么倒数第二行的swap(x,y);不改为swap(&x,&y);与调用函数对应呢
改成这样后运行是在这一行显示错误,是怎么回事
问:但为什么倒数第二行的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)明白了吗?显示错误 我就不知道怎么回事了
用引用啊!
#include
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="<
cout<<"after swap:"<<仔稿兄endl;
cout<<念袭"x="<
你的错误枯谨在拿梁于: 调用函数不能消败运改变传进去的函数值。 所以你把程序改成
void swap(int& a,int& b) //引用形式
{int t;
t=a;a=b;b=t;
或者
void swap(int *a,int *b)
{int t;
t=*a;*a=*b;*b=t;
新手学就是有这个问题,如果明白引用的意思就很磨判好理解了
&是引用的意思,引用就是别名,你的形参是引用,那么每次调用实参都是实参的别名,那么形参发生变化,实参也会发生变化
而函数是值传递的,你没有引用就不会同衫洞时改变实参
如果理解指针那么这就更好理解了瞎塌改
你应该还没有学到指针吧
void swap(int& a,int& b)
{int t;
t=a;a=b;b=t;
}
应该这么写的~
应该用传引用毁纯调用~
补充:
你银宽那么改当然不行~调用只是调用参数~你那是什锋余亮么调用方式昂~函数那么写就对了~倒数第二行不用改~