#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;
}
该程序输出哪个数字?准确选择一个。 一)12 二)15 三)17 D)19 E)20 F)24 七)25 H)27 一)36 J)37 K) 38 左)39 中号)41 N)43 哦)51
我得到了 17,但答案列出为 20。 17 对我来说很有意义,因为 x=x+y 会将 6 分配给 x,然后该函数将返回 (x+5) 或 11,然后在主函数中将其添加到 1 和 5 以打印 17。 但答案列出为 20。如有帮助,请谢谢。
我以为会输出17,结果实际输出了20。
在函数“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.
函数
f()
接受两个整数,x
按值,y
按引用。这意味着在函数中, 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。