常量指针和指针常量的区别简记

以前弄清了常量指针和指针常量的区别,后来很久没用又忘记了,翻会书研究下,发现一个特别好记的方法。

首先

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指向的内存地址的值。

posted @ 2020-04-21 01:01  骑得龙咚墙  阅读(208)  评论(0)    收藏  举报