本来学习引用的时候,只知道可以通过函数达到修改实参的目的,但是倘若不用引用的话,则达不到,于是有一个查看内存的想法,这样或许可以对引用理解的更透彻。
首先引用一个小例子:
#include <iostream>
using namespace std;
void swap(int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void main()
{
int a=3,b=4;
cout<<"a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
}
这是一个简单的小例子,首先我们看一下如果不是使用引用的话,实参和形参的地址。
下面是实参a、b的地址:
下面是形参x、y的起始地址:
下面是x、y交换后的地址
通过上面的对比,我们可以看到,形参x、y经过交换之后,的确相互交换了自己的值,但是,实参和形参占有了不一样的内存空间,所以说,即使我们对传递过来的形参x、y进行交换成功之后,我们的实参还是原来的样子,还是a=3,b=4;
与之相对于,倘若我们使用应用的话,结果是什么样的呢?
首先修该函数的实现代码如下:
void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
然后进行调试,我们下面是刚进入函数式x、y的初始地址
我们发现,现在的形参x、y的地址和实参a、b地址一样,这就解释了为什么说使用引用的时候,声明定义的引用变量都是原来变量的一个别名。
函数运行结束的时候,x、y的地址如下:
所以,我们的a、b经过函数转换之后,值也发生了交换,达到了我们的目的。