const与非const类型赋值问题

  • const与非const之间,相互赋值时,如果使用不当,可能造成一些问题。
非指针类型
  • 非指针类型
const int c_A = 10;
int b = 20;

b = c_A ; // 正确
c_A = b; // Error!
  • 原因:
  1. 关于这个问题,网上有说”非const变量赋给const变量,是非法的“。请不要陷入这种容易混乱的逻辑。
  2. 上述情况,比较正确的解释。const int 在初始化之后,是不能再改变的。且const int 必须在声明时就赋值。
// Error
const int c_A;
c_A = 10;
指针类型
const int* c_PtrA  =  new int(10);
int * ptrB= new int(10);

c_PtrA = ptrB; // 没问题
ptrB = c_PtrA; // 编译报错 不能从 const int* 转换程 int*

// 下面这种情况不会报错,但可能造成程序崩溃
ptrB = (int*)c_PtrA;
// ....
*ptrB = 20; // 此处修改了b和a共同指向的地址的内容,程序崩溃
  • 原因:
  1. const int * 表示,指向常量int 类型的指针,即指向的这块内存的内容,不可以修改。(但指针本身可以修改)。
  2. int * 表示,指向非常量int类型的指针,指针这块内存的内容可修改,指针本身可修改。
  3. const int* 已经限制此地址内容,不可修改。这时,却让 int * 指针指向这块地址,而使用 int * 指针,表示此地址内容可修改。那么到底可不可以改?
  4. 接上,因此逻辑冲突,编译器报错。
// 正确
const int * c_A;
// ...
c_A = someAddress;
  • 因此,对于非指针类型的const,可以理解为使用"const”,就是常量了。什么是常量?10,20,"linduo"等都是常量。 int a、char s等都是变量。
  • 对于指针类型,当然有常量指针和指针常量的区别。可以理解为,使用"const",是用来限制,指针本身或指针指向内容,可不可以修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值