按值传递与按引用传递和按值传递结果

时间:2014-07-23 00:31:13

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

我有这个问题,而且我对打印的内容感到有点困惑,特别是对于传递引用。如果有两个参数,将传递给x的值是多少?谢谢!

考虑以下计划。对于以下每个参数传递方法,打印什么?

一个。通过值传递

湾通过引用传递

℃。通过值结果传递

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;
}

1 个答案:

答案 0 :(得分:3)

前两个应该非常简单,最后一个可能会抛弃你,因为它不是真正的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