考虑以下计划。对于以下每个参数传递方法,打印什么?
一个。通过值传递
湾通过引用传递
℃。通过值结果传递
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;
}
答案 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