彻底搞懂const指针和指向const的指针

彻底搞懂const指针和指向const的指针

我一直觉得迅速掌握一个新的知识点就是拿例子看,那我们直接来咯。

看下面三种情况的例子:

第(1)种情况有以上两种写法:

1const int* p 和  int const * p ;

我们发现
这两句代码有一个共性:不管 int 和 const 谁在前面,“*” 都在 const 的后面。
也就是说这个 p 指针是 一个指向const int类型变量的指针,意思就是变量的值被固定了,不允许被修改。(const int 类型变量就可以理解成const加在了指针p指向的变量上面)
p本身不用初始化,它可以指向任何变量,但它指向的变量里面的内容是不能被改变的。

总结

这个指针 p 可以有无数的选择权,但是选择谁,谁就不许改变。

比喻

就好比是给你一张票子,你可以买任何一座房子,但是房子里的装修不许动。

第(2)种情况有一种写法:

我们发现

int *const p = &a;

p是一个指向int的const指针,这次const不是加在了指针指向的变量身上而是加在了指针自己身上,说明指针变量本身的值不允许被改变了。
所以一开始定义p的时候就要给它初始值,也就是说一开始申请内存的时候就要给它赋上一个具体的地址。
但是地址虽然不可以改变,地址里面的变量值却可以改变。

总结

此时这个 p 一开始就被固定选择了谁,不准再做选择了,选择的地址。

比喻

你手里的这张票子相当于是一个房子券,给你券的时候就相当于给你一栋固定的房子,里面装修可以随便改。

第(3)种情况有以上两种写法:

 const int* const p=一个地址;

 int const* const p=一个地址;

第(3)种情况是这个指针本身和它指向的内容都是不能被改变.

快速记忆以上三种区别:

1 指向const的指针(指针指向的内容不能被修改)const关健字总是出现在“ * ”的左边。
2 而const指针(指针本身不能被修改)const关健字总是出现在“ * ”的右边。
3 不用说两个const中间加个”*”肯定是指针本身和它指向的内容都是不能被改变的。

个人小技巧之快速上手知识点

我觉得读博客和写博客都是其实是很耗能和耗时间的,所以对于一个有效率的程序员来说,快速用上知识点是很必要的一件事。

针对const的用法,我觉得最最关键的记忆点就是看const有没有紧跟着指针p,如果跟着p就说明这个指针被固定了。剩下的情况基本上都是指针指向的变量被固定,还有一小部分是两者都被固定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章