此问题在此处已有答案:
What does '&' do in a C++ declaration?(7个答案)
What does "ampersand operator" mean between a class and a variable?(4个答案)
What does '&' mean in C++?(12个回答)
how does the ampersand(&) sign work in c++? [duplicate](3个答案)
What does a function prototype mean with an ampersand in it? [duplicate](2个答案)
3天前关闭。
1.考虑以下程序:
#include <iostream>
using namespace std;
int f(int x, int& y)
{
x = x + y;
y = x + 2;
return (x + 5);
}
int main()
{
int a = 1;
int b = 5;
int c = 30;
c = f(a, b);
cout << a + b + c << endl;
return 0;
}
字符串
这个程序输出的是哪个数字?请选择一个。
A)12
B)15
C)17
D)19
E)20
F)24
G)25
H)27
I)36
(J)37
K)38
(L)39
M)41
N)43
O)51
我得到了17,但答案是20。
17对我来说是有意义的,因为x=x+y会将6赋给x,然后函数会返回(x+5),或者11,然后在main函数中将其添加到1和5中以打印17。
但答案是20。任何帮助,请感谢。
我以为17会输出,但实际上是20输出。
2条答案
按热度按时间5fjcxozz1#
函数
f()
接受两个整数,x
按值,y
by reference。这意味着在函数中,x
是传入的任何变量的新副本,y
是原始变量的另一个名称。在本例中是b
。所以在
main()
中,c = f(a, b);
线是c = f(1, 5);
。在
f()
中,x
是一个副本,这意味着a
将不受影响。我们知道您的总和是1 + b + c
。回到
f()
。x
立即被重新分配给1 + 5
,因此副本x
的值为6。y
被重新赋值为6 + 2
,8。但是请记住,y
是作为b
的引用传递的,因此b
的值现在也是8。因此总和是1 + 8 + c
。现在我们考虑
f()
中的return语句,它分配给c
。x
是6,6 + 5
是11。所以回到main()
,行c = f(a, b);
将11分配给c
。其和为
1 + 8 + 11
,计算结果为20。uqcuzwp82#
在函数“f”中,参数“int x”意味着对作为第一个参数传递的任何内容进行复制。这意味着在函数调用期间对“x”所做的任何更改在函数返回时都不会持续,因为它们是对x的副本而不是原始的。但是,第二个参数是通过引用传递的,因此是“int& y”。这意味着对第二个参数所做的更改将在函数返回后持续。现在让我们逐步执行代码。
x = x + y
表示“x”= 6(即1 + 5)。在下一行,我们看到y = x + 2
,其中“y”= 6 + 2,这意味着B现在设置为8。最后,我们有c = 6 + 5
,这意味着a + b + c = 1 + 8 + 11 = 20.