标准c语言笔试题复习精华(完结版).doc

上传人:qingbi****02000 文档编号:126729520 上传时间:2020-03-27 格式:DOC 页数:63 大小:318.24KB
返回 下载 相关 举报
标准c语言笔试题复习精华(完结版).doc_第1页
第1页 / 共63页
标准c语言笔试题复习精华(完结版).doc_第2页
第2页 / 共63页
标准c语言笔试题复习精华(完结版).doc_第3页
第3页 / 共63页
标准c语言笔试题复习精华(完结版).doc_第4页
第4页 / 共63页
标准c语言笔试题复习精华(完结版).doc_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《标准c语言笔试题复习精华(完结版).doc》由会员分享,可在线阅读,更多相关《标准c语言笔试题复习精华(完结版).doc(63页珍藏版)》请在金锄头文库上搜索。

1、 C试题讲解问答题部分:(面试中问到的内容)1. 局部变量能否和全局变量重名? (华为) 解析:能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量.比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。3. 如何引用一个已经定义过的全局变量? (华为)解析:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,

2、如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。4. static全局变量与普通的全局变量有什么区别?解析:1)全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式从以上分析可以看出,static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份

3、,普通函数在每个被调用中维持一份拷贝5. 进程和线程的差别(微软亚洲)解析:答:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销6. 用宏定义写出swap(x,y)(思科)解析:#defineswap(x,y)x=x+y;y=x-y;

4、x=x-y7. 什么是预编译,何时需要预编译:(思科)解析:就是指程序执行前的一些预处理工作,主要指#表示的.何时需要预编译?)、总是使用不经常改动的大型代码体。)、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。8. 下述三个有什么区别?char * const p;char const * p,const char *p; (慧通)解:const char* p和char const *p修饰的是p所指向的变量,不可以用*p=a等这样的方式修改变量区的内容. 指针本身是可以修改的,比如说char x,y; cons

5、t *p = &x, p = &y,修改指针本身是可以的,*p = b就不行。 Char *const p;中const修饰的是指针,表明指针在操作过程中不可以修改, 而指针所指向的内容是可以修改的,比如说char x ,y; char* const p = &x; *p = b是可以的, 但p=&y;是不可以的,const修饰的是指针,不可以修改指针的指向, 只可以修改指针所捆绑的变量 9. int (*s10)(int) 表示的是什么啊 ? (慧通)解析:这样的表达式可以遵循这样的规则:从右向左,由近及远,括号优先;比如:从a符号开始。其右边是10,说明a是个数组,其中存了十个元素。再看a

6、的左边是一个*。说明数组中存的是指针。现在在看(*a10)的右边是(int);说明所存的指针是指向有一个int形参的函数现在看(*a10)的左边是个int ,说明指向的函数的返回值为int 类型;10. 进程之间通信的途径,进程间通信方法(慧通)解析:无名管道,命名管道,消息队列,信号,共享内存,套接字。等11. 什么是“引用”?申明和使用“引用”要注意哪些问题?解析:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名

7、的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用12.include 和include “filename.h”的区别?解析:是从标准库路径搜索, “”是从用户当前工作目录开始,找不到,在到标准库开始13.Heap和Stack的区别?解析:Heap是堆,Stack是栈。 栈的空间由操作系统自动分配和回收,而堆上的空间由程序员申请和释放。 栈的空间大小较小,而堆的空间较大。 栈的地址空间往低地址方向生长,而堆向高地址方向生长。 栈的存取效率更高。 程序在编译期间对变

8、量和函数的内存分配都在栈上, 且程序运行过程中对函数调用中参数的内存分配也是在栈上。14.sizeof和strlen之间的区别?解析:(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int类型,该类型保证能容纳实现所建立的最大对象的字节大小。 (2)sizeof是运算符,strlen是函数 (3)sizeof可以用类型做参数,strlen只能用char *做参数,且必须是以0结尾的。 (4)数组做sizeof的参数不退化,传递给strlen就退化为指针。 (5)大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。 (6)st

9、rlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占用内存的大小。 (7)sizeof后如果是类型必须加括号,如果是变量名可以不加括号。 (8)当使用了一个结构类型或变量时,sizeof返回实际的大小。 (9)数组作为参数传递给函数时传的是指针而不是数组,传递的是数组的首地址。 (10)计算结构变量的大小就必须讨论数组对齐问题。 (11)sizeof操作符不能用于函数类型,不完全类型或位字段。15.#define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?解析:i 为30。 16.unsignedshorthash(unsignedsh

10、ortkey)return(key)%256解析 请问hash(16),hash(256)的值分别是:A.1.16;B.8.32;C.4.16;D.1.3217.bool double int float.各种类型与0值的比较(概率较大)解析:请写出BOOLflag与“零值”比较的if语句。if(flag)或者if(!flag)如下写法均属不良风格,不得分。if(flag=TRUE)if(flag=1)if(flag=FALSE)if(flag=0)请写出float x与“零值”比较的if语句。(4分)标准答案示例:constfloatEPSINON=0.00001;if(x=-EPSINON

11、)&(x=”或“=”此类形式如下是错误的写法,不得分。if(x=0.0)if(x!=0.0)请写出char*p与“零值”比较的if语句。(3分)标准答案:if(p=NULL)或者if(p!=NULL)如下写法均属不良风格,不得分。if(p=0)if(p!=0)if(p)if(!)18.结构与联合有和区别?解析:1. 结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所有成员都存在(不同成员的存放地址不同)。2. 对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的

12、19.简述数组与指针的区别?解析:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。 指针可以随时指向任意类型的内存块。(1)修改内容上的差别chara=“hello”;a0=X;char*p=“world”;/注意p指向常量字符串 p0=X;/编译器不能发现该错误,运行时错误 (2)用运算符sizeof可以计算出数组的容量(字节数)。 sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。 C+/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。 注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。 chara=hellowor

13、ld;char*p=a;coutsizeof(a)endl;/12字节 coutsizeof(p)endl;/4字节计算数组和指针的内存容量 voidFunc(chara100)coutsizeof(a)endl;/4字节不是100字节20.如何判断一段程序是由C编译程序还是由C+编译程序编译的?解析:#ifdef_cpluspluscoutc+;#elsecoutc;#endif21.main主函数执行完毕后,是否可能会再执行一段代码,给出说明?解析:可以,可以用_onexit注册一个函数,它会在main之后执行intfn1(void),fn2(void),fn3(void),fn4(void);voidmain(void)Stringstr(zhanglin);_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);printf(Thisisexecu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号