关于二次引用
昨天发了一帖问关于引用的是怎么实现的,有的观点是用指针实现的,又的观点是与指针没有关系,还有的观点是const指针,在这里我姑且不管到底是怎么实现的,我问这个问题其实就是想搞清楚
关于引用的引用
大家都知道二次指针,比如 我可以
int **p;
int *pA;
int a=1;
pA=&a;
p=&pA;
这样的话我就可以通过p来操作变量a.
那么大家看看我下面的程序,我要让三个数从小到大排出来
用二次引用可以这样做
#include "stdafx.h "
#include "iostream "
using namespace std;
void swap(int &X,int &Y) //两个数的交换
{
int temp;
temp=X;
X=Y;
Y=temp;
}
void exchange(int &A,int &B ,int &C )
{
if(A> B) swap(A,B);
if(A> C) swap(A,C);
if(B> C) swap(B,C);
cout < <A < < " " < <B < < " " < <C < <endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int A=3;
int B=2;
int C=1;
exchange(A,B,C);
return 0;
}
经过运行发现没有错误,大家可以看到,
exchange(A,B,c)
是通过引用来传值的
然后在
swap(A,B)里
我把已经是引用的A,B
又做了一次应用
那么这个二次引用是否可以理解为还就是最开始的A,B,C本身呢,
不是说引用就是起了个别名,其实还是使用的原来的空间。
请大家给分析分析
[解决办法]
任何在引用上的操作,都直接关联到原始对象,
所以
int a=100;
int&b=a;
int &c=b; //c仍然为a的引用
[解决办法]
引用并不产生实体对象,也就是不新开辟内存空间储存对象,因此引用不占内存空间,引用的引用依然指向原先的对象。