C-C++面试题大汇总.docx
《C-C++面试题大汇总.docx》由会员分享,可在线阅读,更多相关《C-C++面试题大汇总.docx(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C/C+面试题大汇总收藏最近因为找工作,收集了很多C语言方面方面的面试题以及答案。现在新工作搞定了,决 定把这些资料发出来,送给有需要的朋友,免得再象我样到处搜寻,实在辛苦。发布之前先申明两点:1所有资料来自网络(主要是CSDN),本人只是收集和转发。2所有问题解答(尤其是代码)只是参考,不保证正确。先发基本问题,再发编程问题想成为嵌入式程序员应知道的0x10个基本问题:预处理器(Preprocessor)1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看
2、到几件事情:l)#define语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有 多少秒而不是计算出实际的值,是更清晰而没有代价的。3)意识到这个表达式将使个!6位机的整型数溢出一因此要用到长整型符号L,告诉 编译器这个常数是的长整型数。4)如果你在你的表达式中用到UL (表示无符号长整型),那么你有了一个好的起点。 记住,第一印象很重要。2.写个标准宏MIN ,这个宏输入两个参数并返回较小的个。#define MIN(A,B) (A) 6) ? puts( 6): puts(6。原因是当表达式中存在有符号类型和
3、无符号类型时所有的操作数都自动转换为 无符号类型。因此20变成了一个非常大的正整数,所以该表达式计算出的结果大于60这 点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个 问题,你也就到了得不到这份工作的边缘。13 .评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = OxFFFF;/*ls complement of zero */对于个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero = 0;这问题真正能揭露出应试者是否懂得处理器字长的重要性。
4、在我的经验里,好的嵌 入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把硬件作为个无 法避免的烦恼。到了这个阶段,应试者或者完全垂头丧气了或者信心满满志在必得。如果显然应试者 不是很好,那么这个测试就在这里结束了。但如果显然应试者做得不错,那么我就扔出下面 的追加问题,这些问题是比较难的,我想仅仅非常优秀的应试者能做得不错。提出这些问题, 我希望更多看到应试者应付问题的方法,而不是答案。不管如何,你就当是这个娱乐吧动态内存分配(Dynamic memory allocation )14 .尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配 内存的过程的。
5、那么嵌入式系统中,动态分配内存可能发生的问题是什么?这里,我期望应试者能提到内存碎片,碎片收集的问题,变量的持行时间等等。这个 主题已经在ESP杂志中被广泛地讨论过了(主要是P.J. Plauger,他的解释远远超过我这里能提到的任何解释),所有回过头看一下这些杂志吧!让应 试者进入一种虚假的安全感觉后,我拿出这么个小节目:下面的代码片段的输出是什么,为什么?char *ptr;if (ptr = (char *)malloc(0) = NULL)puts(Got a null pointer);elseputs(Got a valid pointer);这是个有趣的问题。最近在我的个同事不经
6、意把值传给了函数malloc,得到了 一个合法的指针之后,我想到这个问题。这就是上面的代码,该代码的输出是Gota validpointer我用这个来开始讨论这样的一问题,看看被面试者是否想到库例程这样做 是正确。得到正确的答案固然重要,但解决问题的方法和你做决定的基本原理更重要些。Typedef15 Typedef在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用 预处理器做类似的事。例如,思考一下下面的例子:#define dPS struct s *typedef struct s * tPS;以上两种情况的意图都是要定义dPS和tPS作为个指向结构s指针。哪种方法更 好呢?
7、(如果有的话)为什么?这是一一个非常微妙的问题,任何人答対这个问题(正当的原因)是应当被恭喜的。答 案是:typedef更好。思考下面的例子:dPSpl,p2;tPS p3,p4;第一个扩展为struct s * pl, p2;上面的代码定义pl为个指向结构的指,p2为个实际的结构,这也许不是你想要 的。第二个例子正确地定义了 p3和p4两个指针。晦涩的语法16 .C语言同意些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?int a = 5, b = 7, c;c = a+b;这个问题将做为这个测验的个愉快的结尾。不管你相不相信,上面的例子是完全合 乎语法的。问题是编译器如何处理它?
8、水平不高的编译作者实际上会争论这个问题,根据最 处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c = a+ + b;因此,这段代码持行后a = 6, b = 7, c = 12。如果你知道答案,或猜出正确答案,做得好。如果你不知道答案,我也不把这个当作 问题。我发现这个问题的最大好处是这是个关于代码编写风格,代码的可读性,代码的可 修改性的好的话题。华为笔试题1 .写出判断ABCD四个表达式的是否正确,若正确,写出经过表达式中a的值(3分)int a = 4;(A)a += (a+); (B) a += (+a) ;(C) (a+) += a;(D) (+a) +=
9、 (a+);a = ?答:C错误,左侧不是一个有效变量,不能赋值,可改为(+a)+=a;改后答案依次为9,10,10,112 .某32位系统下,C+程序,请计算sizeof的值(5分).char strJ = http: fchar *p = str ;int n = 10;请计算sizeof (str) = ? (1)sizeof ( p ) = ? (2)sizeof ( n ) = ? (3)void Foo ( char str100)请计算sizeof( str) = ? (4)void *p = malloc( 100 );请计算sizeof ( p ) = ? (5)答: 17
10、4 (3) 4 (4) 4 (5) 43 .回答下面的问题.(4分)(1) .头文件中的ifndef/define/endif干什么用?预处理答:防止头文件被重复引用(2) . #include 和 #include filename.h有什么区别?答:前者用来包含开发环境提供的库头文件,后者用来包含自己编写的头文件。(3) .在C+程序中调用被C编译器编译后的函数,为什么要加extern C”声明?答:函数和变量被C+编译后在符号库中的名字与C语言的不同,被extern C”修饰 的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C+程序不能直 接调用C函数。C+提供了一个C连
11、接交换指定符号extern “C”来解决这个问题。(4) . switch。中不允许的数据类型是?答:实型(5) 答面的问题(6分)(1) .Void GetMemory(char *p, int num)*p = (char *)malloc(num);)void Test( void) char *str = NULL;GetMemory(&str, 100);strcpy(str, hello*);printf(str);)请问运行Test函数会有什么样的结果?答:输出“hello”(2) . void Test(void)char *str = (char *) malloc(lOO)
12、;strcpy(str, hello);free(str);if(str != NULL)strcpy(str, world);printf(str);请问运行Test函数会有什么样的结果?答:输出“world”(3) . char *GetMemory(void)char p = hello world*;return p;void Test(void)char *str = NULL;str = GetMemoryO;printf(str);)请问运行Test函数会有什么样的结果?答:无效的指针,输出不确定(5) 写strcat函数(6分)已知 strcat 函数的原型是 char *st
13、rcat (char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。(1)不调用C+/C的字符串库函数,请编写函数strcat答:VC源码:char * _cdecl strcat (char * dst, const char * src)char * cp = dst;while( *cp)cp+; /* find end of dst */while( *cp+ = *src+ ); /* Copy src to end of dst */retum( dst); /* return dst */(2) strcat能
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 试题 汇总
限制150内