C++中关于引用及符号&的问题

今天在学习数据结构的时候,出现了这样一段算法结构:

1 void swap(int &p1,int &p2)
2 {
3   int p;
4   p=p1;
5   p1=p2;
6   p2=p;            
7 }

这段算法,可以实现swap(a,b)两个实参的交换。于是百思不得其解,int &p1到底是什么类型?

课本上介绍了,这种类型在C++中为引用类型,查阅资料可知,引用是某一变量的别名,对引用的操作实际上和对变量的操作是一样的。引用本身不占存储单元,它并不是新定义的一个变量。所以说,对引用求地址,就是对目标变量求地址,目标变量和它的引用实际上是共享一块存储空间的。在数据结构的书上介绍说,传引用的方式是双向的值传递,实参的值传给形参,在函数调用之后,形参的值回传给实参,形参和实参的值同步发生改变。返回本例,在(int &p1,int &p2)之后,实质上进行了int &p1=a;int &p2=b;这样的操作,意思就是p1为a的引用,p2为b的引用,所以在函数中对p1,p2进行操作,就是对引用的操作,实质上就是对实参a,b的操作,所以最终得以swap函数的实现。

而对比如下算法,

1 void swap(int x,int y)
2 {
3   int p;
4   p=x;
5   x=y;
6   y=p;  
7 }

在函数调用的时候,在内存中为形参x,y分配了存储空间,而在调用结束的时候,形参的内存被释放,所以不能实现交换。

今天所说的只是引用作为参数传递的一种作用。在C++中还有其他的作用,等以后有学习C++的时候再做探讨吧!

柳暗花明又一村。让我纠结了半天的问题,终于得以解决,快哉快哉!通过今天的学习,我初步了解了C++语言的魅力所在。以后如果有时间,我会考虑学习C++的,扩展自己的知识。

猜你喜欢

转载自www.cnblogs.com/Sycblog/p/12333873.html