有人可以解释一下通过此代码的值/引用传递的过程

Can someone explain the process of passing by value/reference of this code?

本文关键字:代码 引用 过程 解释 一下      更新时间:2023-10-16
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,但为什么?

这很简单。

当你

按值传递某些东西时(当你在函数中传递第一个变量时),该变量的副本就会诞生!

另一方面,当您通过引用传递某些内容时,实际变量会进入函数。

在您的示例中,您传递了 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
}

twist(t,s)之后

r之所以1,是因为它永远不会改变。

t3,因为它是通过传递到Twist的,所以它永远不会改变。

s之所以14,是因为它是通过引用传递到Twist的,所以Twists发生的任何更改都会改变Twist之外的s值。

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

通过引用传递,就像在变量s的情况下一样,通过引用传递给b,这个b不是一个新变量,而只是变量s的另一个名称。

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

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