只看这一篇,你就能分清指针常量和常量指针

在接触指针常量和常量指针时,在学过很多次依然会混淆,偶然突然对此有点自己的理解,以此来记录下。

前置知识:
我们比较吐槽的是指针在定义时必须加上*这个符号,如下:

int a = 10;
int *ptr = &a;

当我们想要修改指针所指向变量的值时,是这样做的:

*ptr = 20;

这与我们定义时的并不一样。

同时当我们想要修改指针的指向时,是这样做的:

int b = 30;
ptr = &b;

本质上指针是一个存储了地址符的指针类型变量。
因此当你使用*ptr时,实际上就是调用其所指向的对象,通常称为解引用。
所以我们只需要告诉自己,指针的定义比较特殊,不使用*无法将其与普通变量区分开来。特殊使用指针的定义即可,其余的部分就可以正常理解了。

而在指针常量和常量指针这个部分学习时,我经常弄混,甚至在看过多次后仍然无法记住,下面给出一个我个人认为比较好的理解办法。

定义:
指针常量:int * const p本质是告诉编译器指针类型的变量是一个常量。
常量指针:const int *p 或者 int const *p本质是告诉编译器指针p所指向的变量是不可以通过指针p来修改值的,即对于指针p来说,其所指向的变量*p是一个常量。

书写方式:
那么给出这两个名词时,我们只需要先写出其形式,然后看其中*是否与p贴贴即可。我们在书写时先不考虑具体是什么基本数据类型的指针,那么只存在三个名词:const*p
其中p一定是放在最后的,*代表指针,const代表常量。按照名词的表达顺序写出即可判断,最后加上基本数据类型即可。

指针常量:* const所以整体是int * const p
常量指针:const *所以整体是int const * p,或者const也可提前即:const int * p

具体分辨:
指针常量:const 后面是一个p,一个指针类型变量,其存储的为指向变量的地址,不可改变p的值,即指针的指向不变。
常量指针:const后面是一个*p,上面所说过*p就是一个变量,所以不可改变这个变量的值,即不可通过指针p的解引用来改变其所指向变量的具体值。

所以以后如果分不清的时候,就可以这样做啦~
写给以后又分不清两者的自己~

猜你喜欢

转载自blog.csdn.net/weixin_43900869/article/details/114284404