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

C++中按指针传递int时,*x++与*x+=1为何表现不同?

问题分析:为何*x++无法递增变量,而*x+=1可以?

先看对应的代码片段:

int x = 0;
incrementX(&x);
// 此时x的结果不符合预期
void incrementX(int* x)
{
     // x的值保持为0
     *x++;

    // 值每次递增1、2、3……
    *x+=1;
}

核心原因是C++运算符的优先级与结合性差异:

  • 对于*x++:
    后缀++的优先级高于间接访问运算符*,因此这个表达式等价于*(x++)。执行逻辑为:

    1. 先对指针x执行后缀自增:返回指针当前的原始地址(即传入的变量x的地址),随后指针x本身向后移动一个int的内存位置。
    2. 对返回的原始地址解引用,但这一步仅读取原变量的值,并未修改它——自增操作是作用在指针上,而非指针指向的变量,所以原变量x的值保持0不变。
  • 对于*x += 1:
    复合赋值运算符+=的优先级低于*,执行逻辑为:

    1. 先解引用指针x,得到它指向的变量。
    2. 对该变量执行+=1操作,直接修改变量的值,因此能实现预期的递增效果。

如果想用指针实现指向变量的自增,需要用括号改变优先级,写成(*x)++——先解引用得到变量,再对变量执行自增,即可正确修改原变量的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:01:05