const int *a和int *const a的区别

 转自https://blog.csdn.net/weixin_39930333,部分增添删改。


关键点:const 属于修饰符 ,修饰常量,const 修饰的位置很关键。


1、const int *a
  这里const 修饰的是int,而int定义的是一个整值
  因此*a 所指向的对象 值 不能通过 *a 来修改,但是 可以重新给 a 赋值,使其指向不同的对象。
  eg:
         const int *a = 0;
         const int b = 1;
         int c = 1;
         a = &b  //  额外:注意不能通过a 来修改 b值
         a = &c  //   额外:虽然c本身不是一个常量
         *a = 2  //error 为题就在这里,不能修改通过 *a 所指向的对象值,最后赋值得对象是c,因此不能通过*a 来修改c值。
2、int  *const a       
  这里const修饰的是 a ,a代表的是一个指针地址
  因此不能赋给a其他的地址值,但可以修改a指向的值
  这有点和cont int *a相反的意味,例子就不说了
 

3、补充:
  1、int const *a 和 const int *a 的意义相同、作用等价;
  2、 const int *const a
    a所指向的对象及对象的值均不可改变;

  3、const 对象的地址只能赋值给指向const 对象的指针;
  4、指向const 对象的指针可以 被赋 以 一个非const 对象的地址 ;
  5、指向const 的指针常被用作函数的形参,保证被传递给函数的实际对象在函数得实际对象在函数中不会被修改;
  6、常量在定义后就不能被修改,所以它必须被初始化。未初始化的常量定义将导致编译错误(上面都是在说明const的问题,所以没有赋值,实际语句中要赋值的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值