记录一个非常有趣的题目好 强制修改const变量值

const int i=10;
int* j=(int*)&i;
*j=20;
printf("%d,%d\n",*j,i);

问题:在C和C++中,输出的结果分别是什么?

c中: 20 20
c++中: 20 10

原因是因为c++中有个常量折叠概念,所有的const变量都会被放在编译器符号表中,取const变量的时候会直接从表中取值,而不会去内存中取值。(编译优化)

另外说一点,这种方式修改的const变量,只能是局部变量,不能是全局变量或静态变量。 如果是全局区的变量,编译不会出现问题,当运行的时候会发生段错误,因为没有应用程序没有权限去修改全局区的常量。

参考文档:https://blog.csdn.net/weixin_41413441/article/details/80860135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值