必须是可修改的左值_随时随地学习C语言之6—const修饰的变量真的不能修改吗?...

学习C语言的时候我们都知道,const修饰词可以防止程序中被const修饰的变量遭到修改,但事实上真的是不能修改吗?我们先来看一段代码:

6c7da88ab5bfd25e225c8b6da8d71e8c.png

注意第5行的变量p被const修饰,在第8行对p变量进行了修改,编译一下:

2aa0b729d109d23c80c1f795186918ef.png

可以看到,编译器输出错误:对只读变量p进行修改。

这说明const确实是可以起到防止程序中对使用了const修饰符修饰了的变量进行修改的作用,尤其是在一些大型程序中,我们常常会忘记哪个变量是什么属性,使用const修饰符可以很好地对程序中的相关变量进行“保护”。可是,变量p真的没有办法修改吗?我们看下一段代码:

1998e839c09b342ef30a59d1f94f0425.png

程序中,我们增加了第8行,定义了一个int型指针指向变量p,然后在第10行通过对指定地址(此处是p的地址)进行修改的方式对p变量完成了修改。编译一下看看运行结果:

e61ecbe755a98cc5ea5d8ae334ad88c5.png

p变量成功的被修改了!那文章开头提到的“const修饰符可以防止程序对使用const修饰了的变量进行修改”的表述有问题吗?

没有问题!C语言当中,使用const修饰符修饰了的变量,确实是不能以左值赋值的方式进行修改,通俗的说,使用const修饰的变量,是不能通过诸如“变量 = 值;”的方式进行修改的,而通过地址方式进行“间接”修改,还是可以起到类似“投机取巧”的效果的。变量存储在内存中,cpu都是“一视同仁”,每一个字节都是可读可写的(对RAM来说)。文章开头描述的“不能修改”并不是从硬件层面进行限制,而是在编译器层面,也就是编译阶段进行检测的。

这下懂了吧?欢迎一起加入讨论,一起进步~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值