怎么回答433? [关闭]

问题描述 投票:-9回答:4

这段代码的答案是433.它是如何可能的。我以为答案是273。

int x(int &a,int &b)
{
    a=3;
    b=4;
    return a;
}

int main()
{
    int a=2;
    int b=7;
    int c=x(b,a);
    cout<<a<<b<<c;
}

答案:433

c++
4个回答
5
投票

如果你一步一步地按照功能,注意引用main中的变量,那么它会发生什么:

int x(int &a,int &b) {      // note: pass-by-reference !
    a=3;                    // b = 3
    b=4;                    // a = 4
    return a;               // return 3
}

c = x(b,a);                 // c = 3
cout << a << b << c;        // prints 433

1
投票

您正在传递对x方法的引用,而不是值的副本,因此在调用方法后,a和b将更改。这就是为什么结果是433。


1
投票

在函数中,c被赋值为3,a被赋值为4,b被赋值为3。请注意,通过破旧编写的代码,函数中的参数a实际上是main中的b,反之亦然。


1
投票

你得到433输出的原因是pass-by-reference.

为了避免混淆,我将function x的参数更改为inAinB

int x(int &inA,int &inB)
{
    inA=3;
    inB=4;
    return inA;
}

int main()
{
    int a=2;
    int b=7;
    int c=x(b,a);
    cout<<a<<b<<c;
}

现在,当以下调用int c = x(b,a)时,你可以想象inAbinBa的引用。

因此,当inA = 3(当inA设置为3时,它实际上将b的值改为3。

同样,当inB = 4a设置为4。

c被赋予返回值(即3)。

因此,我们有a=4b=3c=3。因此,它打印433

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