#include int main(){ const int a = 10; *(int*)(&a) = 9; // modify a printf("%d", a); return 0; }
为什么?
问:为什么?
Ans: 未定义的行为 。
为了解释,如果你试图通过访问是通过一些non-const
指针来修改const
变量值,它会调用未定义的行为 。
根据C11
标准,第6.7.3章,第6段。
如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义。
注意: main()
的推荐签名是int main(void)
。
该程序将编译但显示未定义的行为,可能输出9
或10
或其他东西或可能崩溃谁知道。
当你说a
是const
,你保证你不会尝试直接或间接地改变a的值,编译器可能做出某些假设。 如果你违背承诺意外事情可能会发生。
const关键字用于不更改变量的值。 如果强行完成结果可能会出乎意料
以上就是c/c++开发分享通过非const指针修改const int相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522212.html