指针与引用类似,实现了对其他对象的间接访问。
指针和引用区别:指针本身就是对象,允许对指针赋值和拷贝,在生命周期内可以先后指向不同的对象;指针不需要在定义时赋初值。
引用不是对象,没有实际地址,不能定义指向引用的指针。
给指针赋值就是令它存一个新的地址,从而指向新的对象;而引用定义后无法再绑定到另外的对象。
指向指针的引用
int a = 12;
int *pa = &a; // pa为int型指针
int *&ra = pa; // ra为对指针pa的引用
int b = 22;
int *pb = &b;
pa = &b; // 正确,指针的对象可以改变
ra = pb; // 错误,引用的对象为指针,初始化后不能改变
对于复杂的指针或引用的声明,从右向左阅读。ra首先是一个引用,引用的对象是一个指针,该指针是int型,所以ra是一个int指针的引用。
空指针
int *p1 = nullptr; // 推荐
int *p2 = 0; // 字面常量0
int *p3 = NULL; // NULL为预处理变量,在头文件cstdlib中定义