按引用传递vs按值传递结果

时间:2016-09-11 20:38:55

标签: parameters parameter-passing programming-languages pass-by-reference

通过引用调用生成形式参数的别名,因此典型参数的每次更改也会影响形式参数,而pass-by value- result将结果复制到典型参数,当函数返回时,它将典型参数复制到正式。(请注意,按值调用结果与按值调用完全不同。)

除了这两个参数传递方法之间的实现差异外,在我看来最终的结果是相同的。

我的问题是这两种方法总是给出相同的结果,否则你能给出这两种方法返回不同结果的例子吗?

1 个答案:

答案 0 :(得分:2)

如果在方法过程中读取原始变量,那将会有所不同。这可能是因为:

  • 使用相同的基础变量
  • 提供了两个参数
  • 该方法调用了更多从原始变量中读取的代码
  • 涉及其他线程

这是C#中的一个例子:

using System;

class Test
{
    static void Main()
    {
        int p = 10;
        Foo(ref p, () => Console.WriteLine(p));
    }

    static void Foo(ref int x, Action action)
    {
        action();
        x = 20;
        action();
    }
}

这是

的输出
10
20

...因为第二次调用action()时,p的值已经更改为20.如果这使用了按结果传递,则p的值只会在Foo返回时更改。