pass-by-reference - 传值 vs 传引用 vs 传值结果

标签 pass-by-reference pass-by-value

我有这个问题,我对打印什么有点困惑,特别是对于传递引用。如果有两个参数,将传递给 x 的值是什么?谢谢!
考虑以下程序。对于以下每个参数传递方法,打印什么?
一种。按值传递
湾通过引用传递
C。通过值-结果

void main()
{
    int x = 5;
    foo (x,x);
    print (x);      
}

void foo (int a, int b)
{
    a = 2 * b + 1;
    b = a - 1;      
    a = 3 * a - b;
}

最佳答案

前两个应该非常简单,最后一个可能会让你失望,因为它不是真正支持 C++ 的构造。这是前段时间在 Fortran 和 Ada 中看到的东西。见 this post欲了解更多信息

至于你的结果,我认为这就是你会得到的:

1)

5

2)
x = 5,
a = 2 * 5 + 1 = 11
b = 11 - 1 = 10
a = 3 * 10 - 10 = 20;  // remember, a and b are the same reference!
x = 20

3)考虑这个(C++风格)。我们将 x 复制到一个变量中,通过引用传递它,然后将结果复制回 x:
void main()
{
    int x = 5;
    int copy = x;
    foo (copy,copy);  // copy is passed by reference here, for sake of argument
    x = copy;
    print (x);      
}

由于在foo中什么都没有函数正在对 x 做任何事情直接,您的结果将与#2 中的结果相同。

现在,如果我们有这样的东西 foo
void foo (int a, int b)
{
    a = 2 * b + 1;
    x = a - 1;      // we'll assume x is globally accessible
    a = 3 * a - b;
}

然后 #2 会产生相同的结果,但 #3 会像这样出来:
a = 2 * 5 + 1 = 11
x = 11 - 1 = 10  // this no longer has any effect on the final result
a = 3 * 11 - 11 = 22
x = 22

关于pass-by-reference - 传值 vs 传引用 vs 传值结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900011/

相关文章:

java - 如何在JavaFX中克隆场景图中的节点?

c++ - 修改传递给该函数内部可变参数函数的参数

c - 这是 C 中引用调用不正确的有效示例吗?

javascript - 两个变量在 Node.js 中使用 require (引用问题)引用相同的 config.js 文件

c++ - 将结构传递给 void 函数

c - 按值将数组传递给函数

c - 动态内存访问仅在函数内部有效

c++ - 临时对象可以绑定(bind)到非常量引用吗?

flutter - 如何在 Flutter 中传递回调

swift - 如何通过引用将 UnsafePointer<UInt8> 传递给 C API?