指针和引用是C++中两个非常重要的基础概念,这两个概念因为都可以用于修改所绑定的非常量的对象的值,都是C++中的复合类型,因此非常容易混淆,本文主要阐述这两个基本概念的区别:
- 首先从概念上引用本质上是对象的一个别名,引用本身并不是一个对象。由于引用不是对象的特点,也就决定了不能定义引用的引用;指针可以用来获取对象的地址,指针本身是一个对象,因此存在指向指针的指针。
- 从使用上,二者都能用于访问和修改其绑定的对象的值,但是形式并不相同,例如
int i=42;
int &j=i; //j是i的引用
j=45; //通过引用将i修改为42
int *p=&i;//p是指向变量的
*p=47; //通过指针将i的值修改为47
- 在声明和初始化上,引用声明之后必须进行初始化,但是指针可以将声明和初始化分离开进行使用。