WHCSRL 技术网

C语言 const 与 指针 (一)

若有错误,还望各位大佬告知,谢谢!

有这样一段代码:

  1.         int  num1 =10
  2.         int num2=20
  3.         int *p =#

p代表的是 指向 通过以下代码可以证明 :

p=&num2;

现在有3种const 表示形式:

  1. //第一种形式:
  2. int *const p;
  3. //第二种形式:
  4. const int *p;
  5. int const *p;
  6. //第三种形式:
  7. const int * const p
  8. int const * const p

我们一 一 解析 

首先 我们理解一下 代码都是从右向左结合  const 和* 级别相同  意思就是说  const 和*  的位置很关键。        

        我们把const分为  在 *左边 在*右边 在*两边 这三种 。

第一种:int *const p           const在*右边

        前面说过,p代表的是指向  const先和p结合 限定了指向

        那么就有这样的分析:

  1. 指向的数据可以改变 :*p =666;//正确        
  2. 指向不能改变:p=&num2;//错误

第二种:const int *p 和int const *p  这两个是一样的效果

        前面说过从右向左原则  那么  * 先与p 结合   const修饰的是*p    *p是 指向的值

        那么就要这样的分析:

  1. 指向的数据不能改变:*p=666;//错误
  2. 指向能改变p=&num2;//正确

第三种 const int * const p  和 int const * const p

        这里const 将 指向 和 指向的值都限定了 那么意思就是说:

        *p=200;不行

        p=&num2;不行

综上所述:

        打个比方,你去银行取钱,你有一个银行账户,const在 * 前 可以限制你修改自己的银行金额 ,const在 * 后 可以限制你不能使用别人的银行账户,const在*前后都有 就可以让你没法取钱和使用别人的银行账户。

推荐阅读