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

问题描述 投票:0回答:2
  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;
 }

该程序输出哪个数字?准确选择一个。 一)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。

c++ function pointers
2个回答
0
投票

在函数“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.


0
投票

函数

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。

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