等级2017年秋程序员软考( )

函数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

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。

等级2020年题吧网络题库( )

若程序中定义了三个函数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继续执行

f3执行结束后返回f2继续执行,f2结束后返回f1继续执行

在发生嵌套调用时,需按照后进先出的方式进行返回。若函数 f1执行时调用f2、函数f2执行时调用f3,那么正常情况下,函数f3执行结束后会返回 f2继续执行,f2 结束后返回f1。

等级2017年春程序员软考( )

一个变量通常具有名字、地址、值、类型、生存期、作用域等属性,其中,变量地址也称为变量的左值(1-value),变量的值也称为其右值(r-value)。当以引用调用方式实现函数调用时,【 】。

A、将实参的右值传递给形参

B、将实参的左值传递给形参

C、将形参的右值传递给实参

D、将形参的左值传递给实参

将实参的左值传递给形参

进行函数调用时,需要向被调用函数传递信息,传值调用是将调用函数(caller)中实参的值(右值)传递给被调用函数(callee)中的形参,引用调用是将调用函数中实参的地址(左值)传递给被调用函数。

考试2016年秋程序员软考( )

已知函数 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

11 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)。

等级2016年春程序员软考( )

函数 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

7,5

程序执行时调用函数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”。