在C++程序的参数中使用&会改变程序的运行方式吗?

ni65a41a  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(144)

此问题在此处已有答案

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输出。

5fjcxozz

5fjcxozz1#

函数f()接受两个整数,x按值,yby 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语句,它分配给cx是6,6 + 5是11。所以回到main(),行c = f(a, b);将11分配给c
其和为1 + 8 + 11,计算结果为20。

uqcuzwp8

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.

相关问题