- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)