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

为什么C++中*a++不生效且有警告,*a=*a+1可正常运行?

问题原因解析

核心原因是C/C++的运算符优先级规则导致两个写法的实际执行逻辑完全不同:

  • 运算符优先级规则:后缀自增运算符++的优先级高于解引用运算符*,因此*a++会被编译器自动解析为*(a++),而非用户预期的(*a)++。
  • *(a++)的执行逻辑:
    1. 后缀自增a++会先返回指针a的原始地址,随后将指针a本身的地址向后偏移1个int类型的长度,也就是修改了指针本身的指向,完全没有触及指针指向的存储值
    2. 对返回的原始地址做解引用操作,但得到的数值没有被赋值、也没有参与任何运算,属于无意义的废弃操作
  • 这直接导致两个异常表现:
    1. 「给指针指向的int值加1」的预期逻辑完全没有执行,运行结果不符合预期
    2. 编译器检测到解引用的结果未被使用,因此会抛出对应警告
  • 而*a = *a + 1的执行逻辑完全符合预期:先解引用a拿到指向的int值,加1后重新写回a指向的内存地址,因此可以正确修改原变量的数值。

如果想使用自增语法实现相同效果,只需要加括号调整优先级即可:(*a)++。


内容的提问来源于stack exchange,提问作者Ronit Akhariya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:00:03