函数main()、f()的定义如下所示。调用函数f()时,第一个参数采用传值(call byvalue)方式,第二个参数采用传引用(call byreference)方式,main()执行后输出的值为【 】。
main() {
int x=2;
f(1,x);
print(x);
}
f(int x int &a) {
x=2*a+1;
a=x+3;
return;
}
A、2
B、4
C、5
D、8
实现函数调用时,形参具有独立的存储空间。在传值方式下,是将实参的值拷贝给形参;
在传引用方式下,是将实参的地址传递给形参,或者理解为被调用函数中形参名为实参的别名,因此,对形参的修改实质上就是对实参的修改。
本题中,函数调用f(1,x)执行时,形参x的初始值为1,a的值为2,经过运算“x=2*a+1”,修改了函数f()的形参x的值(x的值改为5),再经过运算“a=x+3”后,a的值改为8,a实质上是main()函数中x的别名,因此返回main()函数之后,x的值为8。
若程序中定义了三个函数f1、f2和f3,并且函数f1执行时会调用f2、函数f2执行时会调用f3,那么正常情况下,【 】。
A、f3执行结束后返回f2继续执行,f2结束后返回f1继续执行
B、f3执行结束后返回f1继续执行,f1结束后返回f2继续执行
C、f2执行结束后返回f3继续执行,f3结束后返回f1继续执行
D、f2执行结束后返回f1继续执行,f1结束后返回f3继续执行
在发生嵌套调用时,需按照后进先出的方式进行返回。若函数 f1执行时调用f2、函数f2执行时调用f3,那么正常情况下,函数f3执行结束后会返回 f2继续执行,f2 结束后返回f1。
一个变量通常具有名字、地址、值、类型、生存期、作用域等属性,其中,变量地址也称为变量的左值(1-value),变量的值也称为其右值(r-value)。当以引用调用方式实现函数调用时,【 】。
A、将实参的右值传递给形参
B、将实参的左值传递给形参
C、将形参的右值传递给实参
D、将形参的左值传递给实参
进行函数调用时,需要向被调用函数传递信息,传值调用是将调用函数(caller)中实参的值(右值)传递给被调用函数(callee)中的形参,引用调用是将调用函数中实参的地址(左值)传递给被调用函数。
已知函数 f()、g()的定义如下所示,调用函数f()时传递给形参x的值是5。若 g(a)采用引用调用(call by reference)方式传递参数,则函数f()的返回值为______;若 g(a)采用值询用(call by value)的方式传递参数,则函数f()的返回值为______。其中,表达式“x>>1”的含义是将x的值右移1位,相当于x除以 2。
f(int x)
int a =x>>1;
g(a);
return a+i;
g(int x)
x=x*(x+1)i;
returni;
A、35 32
B、32 35
C、11 7
D、7 7
首先分析函数 f()的语句执行过程。形参x的值为5,将x的值(二进制形式高位都为0,低八位为00000101)右移1位后赋值给a,使得a的值为2(二进制形式高位都为 0,低八位为 00000010),然后执行函数调用 g(a)。
若以引用调用方式调用 g(a),则在函数g()执行时,其形参x相当于是 f中a的别名,对于运算“x=x*(x+1)”,此运算前 x的值为 2,运算后 x 的值改变为 6,返回到函数 f后a的值被改变为是6,在f中a和x是两个数据对象,所以 f结束时返回 a+x 的值为 11(5+6)。
若以值调用方式调用 g(a),则在函数 g()执行时,其形参x是一个独立的数据对象(值为2),接下来进行运算“x=x*(x+1)”,运算前x的值为2,运算后x的值改变为 6,最后返回到函数 f0,a的值不改变,仍然是 2,所以 f结束时返回 a+x 的值为 7(即 2+5)。
函数 main()、test()的定义如下所示。调用函数test时,第一个参数采用传值方式,第二个参数采用传引用方式,man()函数中“ printi(x,y)”执行后,输出结果为【 】。
main(){
int x=1,y=5;
test(x,y);
print(x,y);
}
test (int x,int &a){
a=x+a*2;
x=x+1;
return;
}
A、1,5
B、3,5
C、7,5
D、7,10
程序执行时调用函数test时,是将第一个实参y的值拷贝给形参x,而将第二个实参x的地址传递给形参a,或者可以理解为在test中对a的修改等同于是对 main()函数中x的修改。因此test执行时,其运算“a=x+a*2”就是“a=5+1*2”,结果是将a(初始值为1)的值修改为7,也就是 main()中x的值变为7。而“x=x+1”仅修改test中x的值,与 main()中的y和x都无关。因此,在 main()函数中执行“ print(x,y)”后,输出的值为“7,5”。