有人可以解释传递此代码的值/引用的过程吗?

时间:2015-04-15 18:24:19

标签: c++

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但为什么?

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)之后:

r1因为它永远不会改变。

t3,因为它已被传递到Twist,因此它永远不会更改。

s14,因为它已由引用传递到Twist,因此sTwist发生的任何更改都会发生}会在s之外更改Twist的值。

答案 2 :(得分:0)

按值传递会创建一个具有相同内容的新变量,就像在新变量t中复制a的值时一样。

通过引用传递,就像通过引用s传递的变量b一样,此b不是新变量,而只是变量的另一个名称s

您在b上执行的任何操作都会反映在s上。

因此,当您在b函数中修改变量Twist时,s变量的值也会被修改。