You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过指针修改被const指针指向的数据是否安全?编译器会优化吗?

问题解答

访问是否安全?

完全安全。int const *p的含义只是不能通过p修改它指向的变量,但不限制其他途径修改该变量。全局变量i本身是可修改的,通过指针d修改它是合法操作,之后用p读取i的当前值也完全符合C标准,不存在未定义行为。

编译器会不会优化导致*p输出42?

正常场景下绝对不会,但存在理论上的极端陷阱场景:

  • 编译器要把*p优化成初始值42,必须能100%确定*d = 43这行代码不会改动p指向的对象。在你给出的代码里,d是全局指针,明确指向i,而p也是传入的指向i的指针,编译器很容易判断出两者指向同一个变量,所以不会做这种错误优化。
  • 极端情况:如果代码结构更复杂(比如存在多层函数调用、跨编译单元的指针操作),或者启用了某些极端激进的编译选项,编译器可能无法追踪到d和p指向同一个变量,这时候才有可能错误地认为p指向的变量未被修改,从而把*p替换成初始值42。但在你当前的这段简单代码里,这种情况几乎不可能发生。

实际测试结果说明

你测试时*p输出43是完全符合预期的,因为代码确实修改了i的值,p指向的就是i,读取的自然是修改后的结果。


内容的提问来源于stack exchange,提问作者Hren Sgory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:57:11