最近在阅读C++primer,对于常量指针和指针常量愈发困惑,尤其是在网上查阅资料后,发现CSDN某百赞文章写的与C++Primer居然截然相反!这给我在学习过程中带来很大的难题和痛苦。
很多文章里如下写道:(注意下面这段话是错误的!)
~~~
常量指针:const int* p;
指针常量:int* const p = &i;
他们的判断依据是从前往后读,先读到常量,再读到指针,所以是 const int*
/*上面这种判断依据是错误的*/
~~~
但是,事实上,在C++Primer原文中,定义是截然相反的(书56页)。
正解:从英文来记忆
其实我们对比英文就可以很好的理解,常量指针的英文为:const pointer,这样看是不是就很显然啦。const pointer,一个是常量的指针,也就是说这个指针本身是常量,而不是说它指向了一个常量!
而指针常量则是 pointer to const, 也就是指向了一个常量的指针.
所以实际上,应该是下面这样:
~~~
常量指针(const pointer): int* const p = &i; //常量指针必须初始化
指针常量 (pointer to const): const int* p;
记忆诀窍:英文原单词
~~~
详细原文可参看C++Primer第五版56页,欢迎大家讨论!推荐大家在学习中还是要多参看书籍,写的很清楚也很明白。