C语言 const 与 指针 (一)
若有错误,还望各位大佬告知,谢谢!
有这样一段代码:
- int num1 =10;
-
- int num2=20;
-
- int *p =#
p代表的是 指向 通过以下代码可以证明 :
p=&num2;
现在有3种const 表示形式:
- //第一种形式:
- int *const p;
-
-
- //第二种形式:
- const int *p;
- int const *p;
-
-
- //第三种形式:
- const int * const p
- int const * const p
我们一 一 解析
首先 我们理解一下 代码都是从右向左结合 const 和* 级别相同 意思就是说 const 和* 的位置很关键。
我们把const分为 在 *左边 在*右边 在*两边 这三种 。
第一种:int *const p const在*右边
前面说过,p代表的是指向 const先和p结合 限定了指向
那么就有这样的分析:
- 指向的数据可以改变 :*p =666;//正确
- 指向不能改变:p=&num2;//错误
第二种:const int *p 和int const *p 这两个是一样的效果
前面说过从右向左原则 那么 * 先与p 结合 const修饰的是*p *p是 指向的值
那么就要这样的分析:
- 指向的数据不能改变:*p=666;//错误
- 指向能改变p=&num2;//正确
第三种 const int * const p 和 int const * const p
这里const 将 指向 和 指向的值都限定了 那么意思就是说:
*p=200;不行
p=&num2;不行
综上所述:
打个比方,你去银行取钱,你有一个银行账户,const在 * 前 可以限制你修改自己的银行金额 ,const在 * 后 可以限制你不能使用别人的银行账户,const在*前后都有 就可以让你没法取钱和使用别人的银行账户。
推荐阅读