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

C++引用传递与后缀自增执行结果不符预期,请求答疑

C++引用与后置自增运算符的行为解析

核心误解澄清

  1. 不是指针,是引用:你混淆了引用和指针——函数p的第二个参数int &c是引用,不是指针,不需要解引用操作。引用是变量的别名,对c的操作直接作用于它绑定的原变量。
  2. 后置自增c++的行为:后置自增运算符的规则是先使用变量当前值参与运算,再将变量自增1,这和你理解的“先自增再使用”完全相反(那是前置++c的行为)。

初始调用的逐行分析

初始调用是p(c, a),结合全局变量a=2, b=17, c=1:

  • 函数p的第一个形参int a是值传递,接收全局c的值1,所以函数内的局部a等于1。
  • 函数p的第二个形参int &c是引用,绑定的是全局变量a(因为实参是a),所以函数内的c就是全局a的别名,初始值为2。

接下来执行int b = a * c++;:

  • 首先取c的当前值2,和局部a的1相乘,得到2,赋值给函数内的局部b。
  • 完成乘法运算后,c(也就是全局a)自增1,变成3。

所以此时输出1 2 3,和实际运行结果完全一致。

额外验证

你可以看最后一行输出3 17 1,这里的第一个3就是全局a的值——因为初始调用里的引用操作把它从2改成了3,这也能佐证上面的分析。

内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:12:42