注册 登录
编程论坛 C++教室

关于引用的问题 看了好久不明白

zrjlh 发布于 2007-07-07 10:07, 514 次点击
#include <iostream>
using namespace std;
void swap(int a ,int b)
{
int team;
team=a;
a=b;
b=team;
}
int main()
{
int i=3, j=5;
swap(i,j);
cout <<i<<","<<j<<endl;
return 0;
}
小弟刚开始学习C++ 看到引用那里 有这个例题
小弟看不懂为什么调用
void swap(int a ,int b)
{
int team;
team=a;
a=b;
b=team;
}
这个函数了 为什么 a,b的值没变啊
4 回复
#2
cclearner2007-07-07 11:09
你的书上没有画个图啥的仔细说一下?
与引用做对比的
#3
Arcticanimal2007-07-07 11:27
回复:(zrjlh)关于引用的问题 看了好久不明白
C++有几种传参方式:
1.直接传值 exp: void function(int param);
2.传指针 exp: void function(int* param);
3.传引用 exp: void function(int & param);
直接传值就是把实参的值 复制一份 然后传给行参,因此对形参的改变只是改变复制过来的对象(即形参),不改变原来的对象(即实参);
传指针是把实参的地址传给形参,实际上是直接传参,只不过这个参数是指针;
传引用就是让形参是实参的引用 对形参的任何操作就是对实参的操作,实际上也是传指针。
#4
realnaoko2007-07-07 13:46

这里做的是传值引用,
i,j 只把值给了 a,b
a,b换值与i,j无关.

#5
sy_1416182007-07-07 14:06
以下是引用Arcticanimal在2007-7-7 11:27:02的发言:
C++有几种传参方式:
1.直接传值 exp: void function(int param);
2.传指针 exp: void function(int* param);
3.传引用 exp: void function(int & param);
直接传值就是把实参的值 复制一份 然后传给行参,因此对形参的改变只是改变复制过来的对象(即形参),不改变原来的对象(即实参);
传指针是把实参的地址传给形参,实际上是直接传参,只不过这个参数是指针;
传引用就是让形参是实参的引用 对形参的任何操作就是对实参的操作,实际上也是传指针。

他说得很清楚哦~你的程序里等于把形参作为实参的一个副本,SWAP只是在操作形参。
要真正改变传递进去的实参的话,得把它的地址给传进去,就等于传递指针了,这时候形参有的是地址,地址没虚的,是内存中客观存在的,所以改变这个地址所代表的数据就行了,也就是改变了实参。

1