C++ Primer第五版中的提法如下:
在英文版中,const pointer,,常量指针--int* const p
pointer to const指向常量的指针--const int*p
建议提法如下:
- 指向常量的指针变量--const int* p
- 指向变量的指针常量--int* const p
- 指向常量的指针常量--const int* const p
判断方法如下:
*号右边是形容指针,号左边是形容指针指向的对象
如1中const int在号的左边,表示指针p指向的是一个常量,*右边没有const,因此指针本身是个变量
补充说明
- const int*p,正确的理解是不能通过p修改指向的变量或是常量,如:
int a = 0;
const int* p = &a;
//错误,不可以通过p来修改a的值
*p = 1;
//可以通过++a的方式改变a的值
++a
2.int const* p,可以修改p指向的变量但p本身不能修改,因为p本身是一个常量。声明p时必须初始化,但在p初始化时,指向的值可以不进行初始化。
int a;
int const* p = &a;
3.引用可以看做一个指向变量的指针常量。引用本身必须初始化,并且不可以改变引用的值。
int a = 10;
int &b = a;
const int& c = a;
其中int &b = a 可以看做,int const* p = &a,const int& c可以看做const* int const* p = a。指向常量的引用可以看做指向常量的常量指针,不可以通过指向常量的引用改变指向常量的值。