常量指针和指针常量的区别简记
以前弄清了常量指针和指针常量的区别,后来很久没用又忘记了,翻会书研究下,发现一个特别好记的方法。
首先
int a = 10;
const int *p = &a;
此时 printf("*p = %d\n", *p);
输出: 10
如果给 *p 赋值,例如
*p = 20;
会出错。
为什么会出错,看看指针p 的声明 , const int *p;
*p 的前面是const int , 既然是const int, 当然就不能给p指针所指向的地址 *p 赋值了。
然后就是
int a = 10;
int b = 20;
int * const p = &a;
此时 printf("*p = %d\n", *p);
输出 10。
如果我们再改 p = &b; 就会出错,也很简单,
看p 声明: int * const p; 它的前面是 const, 表示指针p是常量不能被修改,
但它所指的存储位置的值可以被修改,因为它只是指向一个 int型的内存地址。
好了,有上面的理解也就方便常量指针和指针常量的区别。
首先我们记不起来啥是常量指针或指针常量,
首先乱写一个
const int *p ;
发现const 在 *前面,即常量在指针前面,那p就是常量指针了,
然后写
int * const p;
发现* 在 const前面,即指针在常量前面,那p就是指针常量了。按顺序读(定义 int * const p化简即 * const, 就是指针常量)
所以常量指针是
const int *p; 表示不能修改p指针指向的内存地址的值
指针常量
int * const p; 表示不能修改p指针存储的地址值
所以
const int * const p; 表示的是不能修改p的值,同时也不能修改p指向的内存地址的值。

浙公网安备 33010602011771号