首页 > 代码库 > C/C++中的取地址与引用

C/C++中的取地址与引用

取地址和引用都采用&的标识符,很容易让人造成误会。

就c/C++而言。引用只是C++中的知识,而取地址是两者共有的。

取地址:

在第6行中我定义了一个指向int类型的指针p,运用&a获取a的地址,并将a的地址赋予它,即p指向a所在的空间。

在第7行中取p所指向空间的值(*:有个高端名字叫解引用)输出。


引用:

在第6行我定义了一个引用b,并将a赋予b。其实质就是给a取了一个小名叫b。对a操作就是对b操作,如果改变b的值(eg。b=20),那么a的值也相应改变(a也会等于20)

从第7、8行更能反应我上面说的,a和b的值相等,并且地址也相同。因此引用是不占用空间的,仅仅是个别名而已。


在函数调用的时候也可能会混淆引用与取地址:

先看一下第2、3行的函数原型。两个函数的功能都是交换两个数。swap1的两个形参都是指针,而swap2的形参是两个引用。

再看一下第8行、第9行,调用swap1的时候传了两个地址给它(x=&a,y=&b),即x指向a的空间,y指向b的空间。调用swap2的时候传了两个引用给它(x=a,y=b),即x只是a的一个别名,y是b的一个别名,实则都代表同一块空间。


函数调用的时候,引用相对于指针来说更高效、跟简便。因为指针传参的实质还是传值调用,copy地址需要开销,而引用直接被编译器优化。有些时候需要二级指针的地方,使用指针的引用会使问题简化很多,我在对树的操作的时候就碰到过,大家可以感受一下。

C/C++中的取地址与引用