GeekPlux

GeekPlux

马上订阅 GeekPlux RSS 更新: https://geekplux.com/atom.xml

C++指针与引用小结

2013年1月2日 23:41

概念

引用

引用就是某一对象(变量)的一个别名。举个例子更容易理解:

int m;
int &n = m;

这段程序中,nm的一个引用(reference),m是被引用物(referent)。 n相当于m别名(绰号),对n的任何操作就是对m的操作。 n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。

指针

指针用于指向对象(变量)。指针提供对其所指对象的间接访问。指针用于指向单个对象。

(这三句摘自《C++ Primer, Fourth Edition》)。再举个例子:

int m;
int *n = &m;

第二条语句定义了一个指向int型的指针n,并初始化n使其指向int型的变量m*n中的 * 操作符表明n是一个指针变量(n本质上也是一个变量,只不过这个变量的存储内容是 地址)。 &m中的 & 符号是取地址操作符,当此操作符用于一个对象上时,返回的是该对象的存储地址。

联系

  • 都是有关地址的概念。 指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
  • 都是间接访问其他对象。
  • 都能用于函数参数和返回值的传递。

区别

  • 一、指针是一个实体(本质上就是存放变量地址的一个变量),而引用只是个别名。

这句话从内存分配的角度很好理解,程序会为指针变量分配内存区域,而引用不分配内存区域。

  • 二、指针可变,引用不可变。

指针在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。 引用在逻辑上不独立,具有依附性,所以引用必须在一开始就被初始化,而且引用一旦和某个对象绑定后就不能再改变(从一而终)。

  • 三、指针可以为空,引用不能为空。

即指针可...

Continue to read