已知函数f()、g()的定义如下所示,执行表达式“x=f(5)”的运算时,若函数调用g(a)是引用调用(call by reference)方式,则执行“x:f(5)”后x的值为 (7) ;若函数调用g(a)是值调用(call by value)方式,

admin2016-05-11  72

问题 已知函数f()、g()的定义如下所示,执行表达式“x=f(5)”的运算时,若函数调用g(a)是引用调用(call by reference)方式,则执行“x:f(5)”后x的值为  (7)  ;若函数调用g(a)是值调用(call by value)方式,则执行“x=f(5)”后x的值为  (8)  。

(8)

选项 A、20
B、25
C、60
D、75

答案A

解析 本题考查程序语言基础知识。
    若实现函数调用时,将实参的值传递给对应的形参,则称为是传值调用。这种方式下形式参数不能向实参传递信息。引用调用的本质是将实参的地址传给形参,函数中对形参的访问和修改实际上就是针对相应实际参数变量所作的访问和改变。
    根据题目说明,调用函数f时,实参的值为5,也就是在函数f中,x的初始值为5,接下来先通过“a=x-1”将a的值设置为4,再调用函数g(a)。函数g()执行时,形参y的初始值为4,经过“y=y*y一1”运算后,y的值就修改为15。
    在引用调用方式下;g函数中y是f函数中a的引用(可视为形参y与实参a是同一对象),也就是说函数f中a的值被改为15,因此,返回函数f中再执行“a*x”运算后得到75(x=5,a=15),因此空(7)应填入的值为75。
    在值调用方式下,g函数中y只获得f函数中a的值(形参y与实参a是两个不同的对象),也就是说在函数g中修改y的值与函数f中a的值已经没有关系了,因此,返回函数f再执行“a*x”运算后得到20(x=5,a=4),因此空(8)应填入的值为20。
转载请注明原文地址:https://kaotiyun.com/show/rIPZ777K
0

最新回复(0)