彻底搞懂const指针和指向const的指针
我一直觉得迅速掌握一个新的知识点就是拿例子看,那我们直接来咯。
看下面三种情况的例子:
第(1)种情况有以上两种写法:
(1) const 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中间加个”*”肯定是指针本身和它指向的内容都是不能被改变的。