int a = 10;
const int* b = &a;//常量指针
int const* c = &a;//常量指针
int* const d = &a;//指针常量
- 常量指针:常量的指针,指针所指向的地址里的内容不能被改变。不能被改变是指不能通过这个指针来改变。
- 指针常量:指针类型的常量,指针只能赋值一次(定义时除外),不能再修改指针指向,类似数组名称。
知乎问答 ④
说是参考《c primer plus》
以上关于指针常量和常量指针的定义正好是相反的,但说的都是一个意思,本地还是一样。
特意查看了《c++ primer plus》
As you saw earlier, assigning a non-const pointer to a const pointer is okay, provided that you’re
dealing with just one level of indirection:
int age = 39; // age++ is a valid operation
int * pd = &age; // *pd = 41 is a valid operation
const int * pt = pd; // *pt = 42 is an invalid operation
这样来看const pointer如果这样定义的话,如果翻译成常量指针,则其定义就是指向常量的指针
那么,指针常量 其定义就是指针类型的常量了。
比较容易误导的地方就是,常量指针和常指针。习惯上,常指针更倾向去表达常属性的指针,实际常指针按翻译来讲,const pointer确是常量的指针。所以常指针(有常属性的指针),其实是指针常量。
从代码上区分:
看const在*前还是*后
*前则修饰*p,即*p为常量
*后则修饰p,即p为常量
从定义上区分:
那就从左往右,*读指针,const读常量。