这篇文章以 int 为实例。而且仅供小白理解。
你是否有这样的烦恼,一直分不清const int *p ; int const *p ; int *const p ; 有的人不知道它代表什么,更有的人连顺序都分不清。这里分享一下个人的理解,仅供助记,可能存在一些表述问题。
一 首先是常量指针,先看看常量指针的定义:常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。很明显,常量指针就是指针,那么我们指针是怎么定义一个指针的:int *p ;或者char *p ; 简单来说就是 数据类型 * 变量名 ; 所以常量指针的指针部分必定是 int *p ,那么常量应该怎么体现呢,采用const修饰一个变量就行了,const放在int的前面和后面修饰都行,即 const int *p ; int const *p 是 常量指针。常量(const)指针(*),记得const 在 * 前面,最终结果是指针就行了。
下面看哪些可以修改哪些不能修改,很显然,常量指针指向一个常量,且常量是不能修改的,我们平时都是通过解引用得到p指向的值,所以*p的值是不可以修改的,既然常量指针是一个指针,指针当然可以指向其他位置。
int test1 = 1;
int test2 = 2;
const int *p;
p = &test1;
p = &test2; //