c/c++语言开发共享通过非const指针修改const int

#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)

    该程序将编译但显示未定义的行为,可能输出910或其他东西或可能崩溃谁知道。

    当你说aconst ,你保证你不会尝试直接或间接地改变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

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐