理解 C++ 中的过程

问题描述 投票:0回答:1

我有以下 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。

发生什么事了?有人可以解释一下吗?

c++ pointers void
1个回答
0
投票

您的参数

b
是一个参考。在这种情况下,它指的是
x
x
b
是保存
int
值的同一内存块的不同名称。因此,您对
x
所做的任何事情都会反映在
b
中,反之亦然。

当您的代码转到

else
时,
x
的值(因此
b) is 17, and 
a
is 42. You decrement
x
(and thus
b
) by 1, and then increment 
b
(and thus
x
) by 
a
. So, you are actually incrementing 
x
by 41, hence
x` 变为 58。

© www.soinside.com 2019 - 2024. All rights reserved.