|
|
|
|
移动端

1.12.2 函数参数

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍函数参数。

作者:猿媛之家来源:机械工业出版社|2017-12-06 17:33

开发者盛宴来袭!7月28日51CTO首届开发者大赛决赛带来技术创新分享

1.12.2 函数参数

【真题 179】以下说法不正确的是()。

A.定义函数时,形参的类型说明可以放在函数体内

B.return后边的值不能为表达式

C.如果函数返回值的类型与返回值表达式的类型不一致,以函数返回值类型为准

D.如果形参与实参的类型不一致,以实参类型为准答案:A、B、D。本题中,对于选项 A,既然形参是变量,必须有类型说明,这个类型说明在定义变量的时候给出,

不能放在函数体内。所以,选项 A错误。

对于选项 B,return后面的值可以为表达式。例如: return 1+1,所以,选项 B错误。

对于选项 C,如果函数返回值的类型与返回值表达式的类型不一致,以函数返回值类型为准。所以,

选项 C正确。对于选项 D,形参与实参类型必须一致。当形参、实参不一致时,会有默认的转换,如果不能转换,则编译器报错。所以,选项 D错误。

【真题 180】有如下代码:

  1. fun(char* p)  
  2. {  
  3. return p;  

函数的返回值是()。

A.无确切值 B.形参 p中存放的地址值

C.一个临时存储单元的地址 D.形参 p自身的地址值

答案:B。

【真题 181】有函数原型 void hello(int a,int b=7,char* pszC=”*”),下面的函数调用中,不合法的是()。

A.hello(5) B.hello(5,8)  C.hello(6,"#")  D.hello(0,0,"#")答案:C。在 C++语言中,通常在进行函数调用时,要为函数的每个参数给定对应的实参。但也有例外,即可

以为参数指定默认值,当函数调用没有指定与形参相对应的实参时,此时就自动使用默认参数。
在使用默认参数时,通常需要注意以下几点内容:

1)默认参数在函数声明中提供,当既有声明又有定义时,定义中不允许存在默认参数。如果函数只有定义,则默认参数才可以出现在函数定义中。

以如下代码为例:

  1. void point(int=3,int=4) ; //声明中给出默认值  
  2. void point(int x, int y) //定义中不允许再给出默认值  
  3. {  
  4. cout <<x<<endl;  
  5. cout <<y<<endl;  

2)函数中如果有多个形参,可以使每个形参都有一个默认值,也可以只对一部分形参指定默认值。当一个参数设定了默认值时,其右边的参数都要有默认值。例如,int test(int a, int b=3, int c=6, int d=8)的写法就是正确的,而如下声明语句就是错误的: int test (int a=6, int b=3, int c=5, int d),因为它未按照从右到左设定默认值,变量 c被设定了默认值,但其右边的变量 d却没有默认值。

3)当默认参数调用时,遵循参数调用顺序,自左到右逐个调用,因此,指定默认值的参数必须放在形参表列的昀右端,否则运行会出错。例如,声明了函数 void  test (int a, int b=3, int c=5); ,对以下几种情况逐一判断是否合法:

① test(3, 8, 9 ); //使用正确。调用时指定了 3个参数,则不使用默认参数

② test(3, 5);  //使用正确。调用时只指定 2个参数,按从左到右顺序调用,相当于 test (3,5,5)

③ test(3); //使用正确。调用时只指定 1个参数,按从左到右顺序调用,相当于 test (5,3,5)

④ test(); //使用错误。因为 a没有默认值

⑤ test(3, , 9)  //使用错误。应该按照从左到右顺序逐个调用再例如:void test(int a=8, int b=3, int c=5); //默认参数 test(); //使用正确。调用所有默认参数,相当于 test(8,3,5)

4)默认值可以是全局变量、全局常量,甚至是一个函数,但不可以是局部变量。因为默认参数的调用是在编译时确定的,而局部变量位置与默认值在编译时无法确定。本题中,对于选项 A,当声明函数时,只有第一个参数没有设定默认值, hello(5)写法正确。所以,

选项 A正确。对于选项 B,声明函数时,只有第一个参数没有设定默认值, hello(5,8)写法正确。所以,选项 B正确。对于选项 C,因为第二个参数类型与声明类型(整型)不一致, hello(6,"#")写法错误。所以,选项

C错误。对于选项 D,hello(0,0,"#")写法正确。所以,选项 D正确。

【真题 182】函数 fun的声明为 int fun(int *p[4]),以下变量可以作为函数 fun的合法参数的是()。

A.int a[4][4]; B.int **a; C.int **a[4] D.int (*a)[4];

答案:B。

【真题 183】已知数组 D的定义是 int D[4][8];,现在需要把这个数组作为实参传递给一个函数进行

处理。下列可以作为对应的形参变量说明的是( )。

A.int D[4][]  B.int *s[8]  C.int(*s)[8]  D.int D[][8]

答案:C、D。

对于选项 A与选项 B,写法错误。

对于选项 C,s是一个数组指针,每个都指向对应的数组的每列。所以,选项 C正确。对于选项 D,当数组作为实参时,必须指定列数,否则可能产生歧义,所以,选项 D正确。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

数据库系统概念

本书是数据库系统方面的经典教材之一。国际上许多著名大学包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学、印度理工学...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊