指针常量、常量指针和指向常量的常量指针

int *const p:常量指针,其本质是一个常量(用指针修饰),这个常量的内容是一个指针,不可以修改p指向的地址,但是可以修改*p的值。定义的时候要赋初值。(数组名也是一个指针常量)

int const *p(const int *p):指针常量,其本质是一个指针(用const修饰)。说明它指向的对象是一个常量,这个对象不能被更改,可以修改p指向的地址,但是不可以修改*p的值。

const int *const p:指向常量的常量指针,既不可以修改p指向的地址,也不可以修改*p的值。

分辨指针常量和常量指针

在int const *p和int *const p中从右向左读遇到p以后替换为"p is a",遇到"*"以后将其替换为"point to"。所以int const *p是p is a point to const int(p是指向常量int的指针(指针常量)),int * const p 中p is a const point to int (p是一个指向int的常量指针) 。

const后面的内容为常量

const int p;  // p 为常量,初始化后不可更改

const int* p;  // *p 为常量,不能通过*p改变它指向的内容
int const* p;  // *p 为常量,同上
int* const p;  // p 为常量,初始化后不能再指向其它内容
 

总结:指针常量地址只读,说明指针常量能读取不同的地址,但是不能修改其指向地址的值。

          常量指针变量只读,也就是说指针变量只能读取一个地址,但是可以改变该地址的值。

原文地址:https://www.cnblogs.com/ligei/p/11423115.html