C语言面试问答题.docxVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
. 注意:该文档由本人从网络和面试经历中总结而得, 不保证答案完全正确,如发现问题联系我: caijicheng2006@163.com 1.头文件中的 ifndef/define/endif 干什么用?预处理 答:防止头文件被重复引用 2. #include 和 #include “”有什么区别? 答:对于# include <> 编译器从标准库开始搜索;对于# include “”编译器从用户工作 路径开始搜索 ,没有搜索到再到标准库搜索 3.头文件的作用是什么 ? 答:( 1).通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布, 只要向用户提供头文件和二进制的库即可。 用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。 2) . 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中 的声明不一致, 编译器就会指出错误, 这一简单的规则能大大减轻程序员调试、改错的负担。 4. switch() 中不允许的数据类型是 ? 答:实型 5.简述数组与指针的区别 答:数组要么在静态存储区被创建(如全局数组) ,要么在栈上被创建。指针可以随时指向任意类型的内存块。 6.分别给出 BOOL , int, float ,指针变量 与 “零值 ”比较的 if 语句(假设变量名为 var) 答: BOOL 型变量: if(!var) int 型变量: if(var==0) float 型变量: const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 指针变量: if(var==NULL) 剖析: 考查对 0 值判断的 “内功 ”,BOOL 型变量的 0 判断完全可以写成 if(var==0) ,而 int 型变 量也可以写成 if(!var) ,指针变量的判断也可以写成 if(!var) ,上述写法虽然程序都能正确运 行,但是未能清晰地表达程序的意思。 一般的,如果想让 if 判断一个变量的 “真 ”、“假 ”,应直接使用 if(var) 、 if(!var) ,表明其 为“逻辑 ”判断;如果用 if 判断一个数值型变量 (short、 int 、 long 等 ),应该用 if(var==0) ,表 明是与 0 进行 “数值 ”上的比较;而判断指针则适宜用 if(var==NULL) ,这是一种很好的编程 习惯。 浮点型变量并不精确,所以不可将 float 变量用 “==”或 “!=”与数字比较,应该设法转化 成“>=”或 “<=”形式。如果写成 if (x == 0.0) ,则判为错,得 0 分。 7.写一个 “标准 ”宏 MIN ,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事? least = MIN(*p++, b); 答: #define MIN(A,B) ((A) <= (B) ? (A) : (B)) MIN(*p++, b) 会产生宏的副作用 剖析: 这个面试题主要考查面试者对宏定义的使用, 宏定义可以实现类似于函数的功能, 但是 '. . 它终归不是函数,而宏定义中括弧中的 “参数 ”也不是真的参数,在宏展开的时候对 “参数 ” 进行的是一对一的替换。 程序员对宏定义的使用要非常小心,特别要注意两个问题: (1)谨慎地将宏定义中的 “参数 ”和整个宏用用括弧括起来。所以,严格地讲,下述解答: #define MIN(A,B) (A) <= (B) ? (A) : (B) #define MIN(A,B) (A <= B ? A : B ) 都应判 0 分; (2)防止宏的副作用。 宏定义 #define MIN(A,B) ((A) <= (B) ? (A) : (B)) 对 MIN(*p++, b) 的作用结果是: ((*p++) <= (b) ? (*p++) : (*p++)) p 会作三次 ++自增操作。 这个表达式会产生副作用,指针 除此之外,另一个应该判 0 分的解答是: #define MIN(A,B) ((A) <= (B) ? (A) : (B)); 这个解答在宏定义的后面加 “;,”显示编写者对宏的概念模糊不清,只能被无情地判 0 分并被面试官淘汰。 8.为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh #define __INCvxWorksh #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif #endif /* __INCvxWorksh */ 答:头文件中

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档