c和c程序设计员应聘常见面试试题深入剖析(编辑修改稿)内容摘要:
只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。 数组名的本质如下: ( 1)数组名指代一种数据结构,这种数据结构就是数组; 例 如: char str[10]。 cout << sizeof(str) << endl。 输出结果为 10, str 指代数据结构 char[10]。 ( 2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改; char str[10]。 str++。 //编译出错,提示 str 不是左值 ( 3)数组名作为函数形参时,沦为普通指针。 Windows NT 32位平台下,指针的长度(占用内存的大小)为 4字节,故 sizeof( str ) 、sizeof ( p ) 都为 4。 试题 3:写一个 “标准 ”宏 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分并被面试官淘汰。 试题 4:为什么标准头文件都有类似以下的结构。 ifndef __INCvxWorksh define __INCvxWorksh ifdef __cplusplus extern C { endif /*...*/ ifdef __cplusplus } endif endif /* __INCvxWorksh */ 解答: 头文件中的编译宏 ifndef __INCvxWorksh define __INCvxWorksh endif 的作用是防止被重复引用。 作为一种面向对象的语言, C++支持函数重载,而过程式语言 C则不支持。 函数被 C++编译后在 symbol库中的名字与 C 语言的不同。 例如,假设某个函数的原型为: void foo(int x, int y)。 该函数被 C 编译器编译后在 symbol 库中的名字为 _foo,而 C++编译器则会产生像_foo_int_int 之类的名字。 _foo_int_int 这样的名字包含了函数名和函数参数数量及类型信息,C++就是考这种机制来实现函数重载的。 为了实现 C 和 C++的混合编程, C++提供了 C 连接交换指定符号 extern C来解决名字匹配问题,函数声明前加上 extern C后,则编译器就会按照 C语言的方式将该函数编译 为_foo,这样 C 语言中就可以调用 C++的函数了。 试题 5:编写一个函数,作用是把一个 char 组成的字符串循环右移 n个。 比如原来是 “abcdefghi” 如果 n=2,移位后应该是 “hiabcdefgh” 函数头是这样的: //pStr 是指向以 39。 \039。 结尾的字符串的指针 //steps 是要求移动的 n void LoopMove ( char * pStr, int steps ) { //请填充 ... } 解答: 正确解答 1: void LoopMove ( char *pStr, int steps ) { int n = strlen( pStr ) steps。 char tmp[MAX_LEN]。 strcpy ( tmp, pStr + n )。 strcpy ( tmp + steps, pStr)。 *( tmp + strlen ( pStr ) ) = 39。 \039。 strcpy( pStr, tmp )。 } 正确解答 2: void LoopMove ( char *pStr, int steps ) { int n = strlen( pStr ) steps。 char tmp[MAX_LEN]。 memcpy( tmp, pStr + n, steps )。 memcpy(pStr + steps, pStr, n )。 memcpy(pStr, tmp, steps )。 } 剖析: 这个试题主要考查面试者对标准库函数的熟练程度,在需要的时候引用库函数可以很大程度上简化程序编写的工作量。 最频繁被使用的库函数包括:。c和c程序设计员应聘常见面试试题深入剖析(编辑修改稿)
相关推荐
+ 子程序返回 2us + R7 赋 值 1us = 5us 延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms 计算公式 :延时时间 = [(2*R5+3)*R6+3]*R7+5 二 . 200ms 延时子程序 程序 : void delay200ms(void) { unsigned char i,j,k。 for(i=5。 i0。 i)
六) 第 6 章 Inter 网络基础 2 课程设计学时 合 计 20学时 五、 考核方式 根据本课程的特点,应注意基础理论和操作能力并重。 考核方式为:平时成绩和单元作业占 20%,上机操作能力考核占 40%,期末理论考试占 40%。 六、 教材与参考教材 选用教材: 《计算机应用基础》 杨明广 主编 电子科技大学出版社 《计算机应用基础》 黄迪明 主编 电子科技大学出版社 99 年版
a= b+(((c/d)/function— call())* 5) 这样,就能确保表达式被正确求值,而且编译程序不会为了优化代码而重新安排运算符的优先级了。 1. 13 ++var 和 var++有什么区别 ? “++” 运算符被称为自增运算符。 如果 “++” 运算符出现在变量的前面 (++var),那么在表达式使用变量之前,变量的值将增加 1。 如果 “++” 运算符出现在变量之后
发现一个电台的时候,我调整我的频率知道它的信号听不到为止,这表示我的发射频率差不多和那个电台一致了,接下来我再把 RIT调回来几 Hz直到我能听见信号,这样只会花费我几秒钟时间。 把信号声调调整到 600Hz 全凭经验。 我觉得这种同步频率的方法最适合我。 最近我对 DX很感兴趣,在通 DX电台的时候,这种方法节省了我很多时间。 同步频率的方法的确很绕口,我有时也被弄糊涂
mage:url(C:\Documents and Settings\Administrator\桌面\)。 backgroundrepeat:norepeat。 backgroundposition:20px 60px} /style /head body p这个 HTML 使用了 CSS 的 backgroundposition 属性。 这个属性和backgroundimage
/ul /div /*=====主导航 =====*/ mainMenu { width:100%。 height:30px。 background:url(images/) repeatx。 } mainMenu ul li { float:left。 lineheight:30px。 marginright:1px。 cursor:pointer。 } /*=====主导航结束