const和非const变量/对象/指针之间的赋值问题

const和非const变量/对象/指针之间的赋值问题

变量赋值

const int a = 10;
int b = 10;
a = b;// error
b = a;// correct

变量在经过const关键字修饰以后就不能再被修改了,所以a=b是错误的。而b=a仅仅是将a变量中的内容复制一份给了变量b,所以赋值过后对副本b进行操作是不会对于a有什么影响的,这样行为是合法的。

对象赋值

struct A
{
	int a;
};
const A a;
A b;
a = b;// error
b = a;// correct

对象之间的赋值和变量之间的赋值也是一样的,只不过对象中可能存在的数据更多一点,但是赋值的性质还是和变量赋值是一样的。

指针赋值

int n1, n2, n3;
const int* a = &n1;
int* b = &n2;
int* const c = &n2;
a = b;// correct
b = a;// error
b = c;// correct

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OECqWkBI-1628693667815)(C:\Users\张昊宇\AppData\Roaming\Typora\typora-user-images\1628693631603.png)]

首先要明确a和c的区别,a中const修饰的是*a,所以a指针指向的内容是不可以被改变的,而c中const修饰的是c本身的指向,所以c的指向是不能被改变的。

a=b,相当于a指向b指向的空间,但是a的指向的内容是不可以被修改的,b的指向是可以修改的,所以这样a的指向不会对b指向的空间造成潜在威胁。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWkFBF5F-1628693667817)(C:\Users\张昊宇\AppData\Roaming\Typora\typora-user-images\1628693641545.png)]

b= a,相当于b指向a指向的空间,a的指向的内容是不可以被修改的,b的指向是可以修改的,这时候如果通过b就可以修改a指向的空间中这不允许被修改的内容,这样b指针的指向改变就会对a指向的空间造成潜在的威胁。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcFtFY8B-1628693667817)(C:\Users\张昊宇\AppData\Roaming\Typora\typora-user-images\1628693648099.png)]

b=c,相当于b指向c指向的空间,因为c的指向不可以被改变,但是空间的内容是可以被修改的,所以b并没有对c指向的空间造成潜在的威胁。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVhL3zsV-1628693667819)(C:\Users\张昊宇\AppData\Roaming\Typora\typora-user-images\1628693654546.png)]

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hyzhang_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值