函数foo()、hoo()定义如下,调用函数hoo(a, x)的两个参数分别采用引用调用(call by reference)和值调用(call by value)方式传递,则函数调用foo(5)的输出结果为 :
13,5
void hoo(int &x, int y) {
y = y + 10; // 增加y的值10
x = y - x; // x更新为当前y的值减去当前x的值
return; // 结束函数
}
void foo(int x) {
int a = 2; // 定义局部变量a并初始化为2
hoo(a, x); // 调用hoo,其中a通过引用传递,x通过值传递
print(a, x); // 打印修改后的a和未改变的x
}
调用过程 foo(5)
初始设置:
x在调用foo(5)时被设置为5。
a在foo中被初始化为2。
调用 hoo(a, x):
a传递给hoo的第一个参数(通过引用),因此hoo中的x直接关联到foo中的a。
x传递给hoo的第二个参数y(通过值),所以y在hoo中是一个独立的变量,初始值为5。
在hoo内部执行:
首先,执行y = y + 10 → y变为5 + 10 = 15。
接着,执行x = y - x → 因为此时y是15,而x(即foo中的a,因为x是通过引用传递)是2,所以x更新为15 - 2 = 13。
结束hoo,回到foo:
a(即hoo中的x)现在是13。
x在foo中仍然是5,因为x是通过值传递给hoo的,所以在hoo中对y的修改不影响foo中的x。
输出结果:
print(a, x);打印出13, 5。
最终输出
根据上述分析,调用foo(5)的输出结果为 13, 5。这反映了引用传递使得hoo函数可以修改foo函数中的变量a的值,而值传递确保foo中的x不被hoo中的修改所影响。这个结果展示了引用传递和值传递的特性以及它们如何在函数间交互。
因此,根据题目描述,正确的选项应该是 13, 5。