void Twist(int a, int& b)
{
int c;
c = a+2;
a = a*3;
b = c+a;
}
以下代码片段的输出是什么涉及Twist(所有变量类型为int)?
r = 1;
s = 2;
t = 3;
Twist(t,s);
cout << r<< ''<< s<< ''<< t<< endl;
我知道这显示1,14,3但为什么?
答案 0 :(得分:0)
很简单。
当您按值传递某些内容时(当您在函数中传递第一个变量时)该变量的副本就会诞生!
另一方面,当您通过引用传递某些内容时,实际变量将进入该函数。
在您的示例中,您传递的是a但实际b的副本。因此,当您退出该函数时,t
没有更改,而通过引用传递的s
已更改。
void Twist(int a, int& b)
{
// a is 3 and b is 2
int c;
c = a+2; // c = 3 + 2 = 5
// CAREFUL: This is not the actual t you passed. It is a copy.
a = a*3 // a = 3 * 3 = 9.
// THIS IS the actual s you passed. NOT a copy.
b = c+a; // b = 9 + 5 = 14
// Now when you get out the value of s is updated to 14
}
答案 1 :(得分:0)
twist(t,s)
之后:
r
是1
因为它永远不会改变。
t
为3
,因为它已被值传递到Twist
,因此它永远不会更改。
s
为14
,因为它已由引用传递到Twist
,因此s
中Twist
发生的任何更改都会发生}会在s
之外更改Twist
的值。
答案 2 :(得分:0)
按值传递会创建一个具有相同内容的新变量,就像在新变量t
中复制a
的值时一样。
通过引用传递,就像通过引用s
传递的变量b
一样,此b
不是新变量,而只是变量的另一个名称s
。
您在b
上执行的任何操作都会反映在s
上。
因此,当您在b
函数中修改变量Twist
时,s
变量的值也会被修改。