Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读:
char * const cp; cp is a const pointer to char;
const char * p; p is a pointer to const char;
char const * p; 同上(因为C++里面没有const*的运算符,所以const只能属于前面的类型);
结论:
char * const cp : 定义一个指向字符的const指针,即指针常量;
const char* p : 定义一个指向字符常数的指针,即常量指针;
char const* p : 等同于const char* p
指针常量
一种类型为指针的常量,即指针本身为常量,指针指向的地址不可以改变,但是指向的地址所对应的内容可以改变
指针常量的申明:Type * const pointer ;
cp = p //错误 因为这是一个指针常量,改变指向的地址了
*cp = ‘a’ // 正确 因为指向的地址的内容是可以变化的
常量指针
一种指针,指向的内容为常量;指针所指向的内容不能变,但是指向的地址可以改变
常量指针的申明:const Type *pointer / Type const* pointer;
cp = p //正确 因为这是一个常量指针,可以改变指向的地址
*cp = ‘a’ // 错误 因为指向的地址的内容是不可以变化的