C++引用传递与后缀自增执行结果不符预期,请求答疑
C++引用与后置自增运算符的行为解析
核心误解澄清
- 不是指针,是引用:你混淆了引用和指针——函数
p的第二个参数int &c是引用,不是指针,不需要解引用操作。引用是变量的别名,对c的操作直接作用于它绑定的原变量。 - 后置自增
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
相关产品推荐
相关产品推荐

