等级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”。

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

函数调用时若实参是数组名,则是将【 】传递给对应的形参。

A、数组元素的个数

B、数组所有元素的拷贝

C、数组空间的起始地址

D、数组空间的大小

数组空间的起始地址

函数调用以数组作为实参时,是将数组空间的首地址传递给对应的形参,要求形参是指针参数。

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

函数f()、g()的定义如下所示,已知调用f时传递给其形参x的值是10。若以引用方式调用g,则函数f()的返回值为【 】。

f(int x):

int y=0;

y=g(x);

return x+y;


g(int x):

x=x+5;

return x;

A、10

B、15

C、25

D、30

30

引用调用的本质是将实参的地址传给形参,函数中对形参的访问和修改实际上就是针对相应实际参数变量所作的访问和改变。

在引用方式调用g时,g中对其形参x的修改可视为是对调用g时实参的修改,因此调用g之后,f中的y得到返回值15,f中的x也被修改为15,所以f的返回值为30。