引用与指针很类似,但本质上确实不同的两个东西。引用不是对象,只是一个对象的别名,因而引用必须初始化。指针属于对象,因而存在着指向指针的引用,而不存在指向引用的指针,即是指向了引用本质上而言是指向了引用所代表的对象。int *&变量名 指指向指针的引用,而int &*变量名 则会报错。
const 限定符,分为顶层const和底层const,顶层const 包括const int a=1; int const *b等;表示a,b一旦指向某个对象,就无法更改了。顶层const 对于常用的类型名的赋值操作无影响,而指针变量要求赋值左端也是顶层const。而底层const包括 const int *c;const int &d;表示c所指向的对象或者d所表示的表名对象不可被更改,当底层const作为等号右侧赋值时,要求左侧的对象或者引用也是底层const,如int *e= b;就是错误的。从上述可以看出指针拥有顶层和底层const,而引用只有底层const。
空指针:C++11新标准中引入了字面值nullptr来表示,过去还有使用字面值0来生成空指针,过去的程序也曾用过NULL的预处理变量来作为空指针。