const
int
* p2 = &n;
// 底层const,可以改变指针地址,不能改变指针指向的值
int
*
const
p3 = &n;
// 顶层const,可以改变指针指向的值,不能改变指针地址
const int a; int const a; 这两个写法是等同的,表示a是一个int常量。 const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。 int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。 int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。
const就近原则