代码之家  ›  专栏  ›  技术社区  ›  Homer Jay Simpson

理解C++中的过程[关闭]

  •  -4
  • Homer Jay Simpson  · 技术社区  · 2 年前

    我在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。

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

    1 回复  |  直到 2 年前
        1
  •  1
  •   Remy Lebeau    2 年前

    您的参数 b 参考 (化名) int 变量在这种情况下 全局变量 x ,因为那就是 main() 正在通过。所以, x b 是保存 int 价值因此,你对 x 反映在 b 反之亦然。

    当您的代码转到 else 第一次 x (因此 b )是17。您递减 x (因此 b )乘以1,然后递增 b (因此 x )由 a (42)。所以,你实际上是在增加 x 到41,因此 x 变为58(17-1+42=58)。

    推荐文章