我有这个问题,我对打印什么有点困惑,特别是对于传递引用。如果有两个参数,将传递给 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/