我需要在考试前弄清楚一些事情。你能帮我解答一下这个问题吗?如果我错了,我想解决它并学习真正的答案。
谢谢!!!
int x = 1;
int foo (int a) { return a + bar (x) + x; }
int bar (int b) { b++; return b * x; }
int main () { int x = 2; foo(x); }
以下情况的输出是什么:
a)静态范围和按值传递。
5 :: foo-> 2 * bar(x)+ x-> 2 + [2(b)* 1(全局x)] + 1(全局x)
b)静态范围以参考方式传递。
8 :: foo-> 2 * bar(x)+ x-> 2 + [2(b)* 2(全局x改变)] + 2(全局x改变)
c)静态范围按值 - 结果传递。
8 :: foo-> 2 * bar(x)+ x-> 2 + [2(b)* 2(全局x改变)] + 2(全局x改变)
d)动态范围和按值传递。
10 :: foo-> 2 * bar(x)+ x-> 2 + [3(b是主要的x,是2,我们加1)* 2(来自主要的foo x)] + 2(来自主要的foo x)
e)动态范围并通过引用传递。
15 :: foo-> 2 * bar(x)+ x-> 2 + [3(b是来自main的x,我们加1)* 3(来自main的foo x,因为它也被b别名增加)] + 3(来自main的foo x)