我有以下 C++ 代码:
#include <iostream>
using namespace std;
int x;
void p(int a, int &b) {
cout << x << " " << a << " " << b << endl;
if (a < b) {
a = x+b;
}
else {
--x;
b += a;
a = x/2;
cout << x << " " << a << " " << b << endl;
p(b-x, a);
}
cout << x << " " << a << " " << b << endl;
}
int main() {
x = 17;
p(42, x);
cout << x << endl;
}
这段代码的输出如下,我不明白:
17 42 17
58 29 58
58 0 29
58 87 29
58 29 58
58
具体来说,在
main
中,x=17
分配一个全局参数。它开始计算p(a=42,&b=17)
。它打印出:x = 17 (global),a = 42 ,b = 17 (pointer)
。到目前为止还不错!
接下来,转到
if
。 if 42<17
不满足,转到else
,其中x
减一,所以x=17-1=16
。不是 58。
发生什么事了?有人可以解释一下吗?
您的参数
b
是一个参考。在这种情况下,它指的是x
。 x
和 b
是保存 int
值的同一内存块的不同名称。因此,您对 x
所做的任何事情都会反映在 b
中,反之亦然。
当您的代码转到
else
时,x
的值(因此 b) is 17, and
ais 42. You decrement
x(and thus
b) by 1, and then increment
b(and thus
x) by
a. So, you are actually incrementing
xby 41, hence
)
x` 变为 58。