这段代码的答案是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
如果你一步一步地按照功能,注意引用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
您正在传递对x方法的引用,而不是值的副本,因此在调用方法后,a和b将更改。这就是为什么结果是433。
在函数中,c
被赋值为3,a
被赋值为4,b
被赋值为3
。请注意,通过破旧编写的代码,函数中的参数a
实际上是main中的b
,反之亦然。
你得到433
输出的原因是pass-by-reference.。
为了避免混淆,我将function x
的参数更改为inA
和inB
。
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)
时,你可以想象inA
是b
和inB
对a
的引用。
因此,当inA = 3
(当inA
设置为3时,它实际上将b
的值改为3。
同样,当inB = 4
,a
设置为4。
c
被赋予返回值(即3)。
因此,我们有a=4
,b=3
和c=3
。因此,它打印433
。