ImageVerifierCode 换一换
格式:DOC , 页数:34 ,大小:38.54KB ,
资源ID:8188130      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8188130.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(2024年C语言面试题大汇总个人觉得还是比较全.doc)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

2024年C语言面试题大汇总个人觉得还是比较全.doc

1、4.    static有什么用途?(请最少阐明两种) 1.限制变量的作用域 2.设置变量的存储域 7.    引用与指针有什么区分? 1) 引用必须被初始化,指针无须。 2) 引用初始化以后不能被变化,指针能够变化所指的对象。 2) 不存在指向空值的引用,不过存在指向空值的指针。 8.    描述实时系统的基本特性 在特定期间内完成特定的任务,实时性与可靠性 9.    全局变量和局部变量在内存中是否有区分?假如有,是什么区分? 全局变量储存在静态数据库,局部变量在堆栈 10.   什么是平衡二叉树? 左右子树都是平衡二叉树 且左右子树的深度差值的绝对值小于1 11

2、   堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12.   什么函数不能申明为虚函数? constructor 13.   冒泡排序算法的时间复杂度是什么? O(n^2) 14.   写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16.   Internet采取哪种网络协议?该协议的重要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17.   Internet物理地址和IP地址转换采取什么协议? ARP (Address Resolution Protocol)(地址解析協議)

3、 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能辨别 哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始次序循环数数,每数到M输出该数值,直至所有输出。写出 C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量能够与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不 会用到全局变量。对于有些编译器而言,在同一个函数内能

4、够定义多个同名的局部变量, 例如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环 体内 2、怎样引用一个已经定义过的全局变量? 答:extern 能够用引用头文献的方式,也能够用extern核心字,假如用引用头文献方式来引用某个在 头文献中申明的全局变理,假定你将那个变写错了,那么在编译期间会报错,假如你用ex tern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错 3、全局变量可不能够定义在可被多个.C文献包括的头文献中?为何? 答:能够,在不一样的C文献中以static形式来申明同名全局变量。 能够在不一样的C文献中

5、申明同名的全局变量,前提是其中只能有一个C文献中对此变量赋初 值,此时连接不会犯错 4、语句for( ;1 ;)有什么问题?它是什么意思? 答:和while(1)相同。 5、do……while和while……do有什么区分? 答:前一个循环一遍再判断,后一个判断以后再循环 6、请写出下列代码的输出内容 #include main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 1、

6、static全局变量与一般的全局变量有什么区分?static局部变量和一般局部变量有什么 区分?static函数与一般函数有什么区分? 全局变量(外部变量)的阐明之前再冠以static 就组成了静态的全局变量。全局变量自身就 是静态存储方式, 静态全局变量当然也是静态存储方式。 这二者在存储方式上并无不一样 。这二者的区分虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文 件组成时,非静态的全局变量在各个源文献中都是有效的。 而静态全局变量则限制了其作 用域, 即只在定义该变量的源文献内有效, 在同一源程序的其他源文献中不能使用它。 因为静态全局变量的作用域局限于

7、一个源文献内,只能为该源文献内的函数公用, 因此可 以防止在其他源文献中引起错误。 从以上分析能够看出, 把局部变量变化为静态变量后是变化了它的存储方式即变化了它的 生存期。把全局变量变化为静态变量后是变化了它的作用域, 限制了它的使用范围。 static函数与一般函数作用域不一样。仅在本文献。只在目前源文献中使用的函数应当阐明 为内部函数(static),内部函数应当在目前源文献中阐明和定义。对于可在目前源文献以 外使用的函数,应当在一个头文献中阐明,要使用这些函数的源文献要包括这个头文献 static全局变量与一般的全局变量有什么区分:static全局变量只初使化一次,预

8、防在其 他文献单元中被引用; static局部变量和一般局部变量有什么区分:static局部变量只被初始化一次,下一次依 据上一次成果值; static函数与一般函数有什么区分:static函数在内存中只有一份,一般函数在每个被调 用中维持一份拷贝 2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存 在于( 堆)中。 3、设有如下阐明和定义: typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too; DA

9、TE max; 则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行成果是:___52____ 答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所 以它的大小是20 data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32. 因此成果是 20 + 32 = 52. 当然...在某些16位编辑器下, int也许是2字节,那么成果是 int2 + DATE10 + double8 =  20 4、队列和栈有什么区分?

10、 队列先进先出,栈后进先出 5、写出下列代码的输出内容 #include int inc(int a) { return(++a); } int multi(int*a,int*b,int*c) { return(*c=*a**b); } typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); void show(FUNC2 fun,int arg1, int*arg2) { INCp=&inc; int temp =p(arg1); fun(&temp,&arg1,

11、arg2); printf("%d\n",*arg2); } main() { int a; show(multi,10,&a); return 0; } 答:110 7、请找出下面代码中的因此错误 阐明:如下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba” 1、#include"string.h" 2、main() 3、{ 4、 char*src="hello,world"; 5、 char* dest=NULL; 6、 int len=strlen(src); 7、 dest=(char*)malloc(len); 8、 char* d=d

12、est; 9、 char* s=src[len]; 10、 while(len--!=0) 11、 d++=s--; 12、 printf("%s",dest); 13、 return 0; 14、} 答: 措施1: int main(){ char* src = "hello,world"; int len = strlen(src); char* dest = (char*)malloc(len+1);//要为\0分派一个空间 char* d = dest; char* s = &src[len-1];//指向最后一个字符 while( len-- !=

13、0 ) *d++=*s--; *d = 0;//尾部要加\0 printf("%s\n",dest); free(dest);// 使用完,应当释放空间,以免导致内存汇泄露 return 0; } 措施2: #include #include main() { char str[]="hello,world"; int len=strlen(str); char t; for(int i=0; i

14、 } printf("%s",str); return 0; } 1.-1,2,7,28,,126请问28和126中间那个数是什么?为何? 第一题的答案应当是4^3-1=63 规律是n^3-1(当n为偶数0,2,4)       n^3+1(当n为奇数1,3,5) 答案:63 2.用两个栈实现一个队列的功效?要求给出算法和思绪! 设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B是否为空; (2)假如不为空,则将栈A中所有元素依次pop出并push到栈B; (3)将栈B的栈顶元素pop出; 这么实现的队列入队和出队

15、的平摊复杂度都还是O(1), 比上面的几个措施要好。3.在c语言 库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么? 函数名: atol 功 能: 把字符串转换成长整型数 用 法: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\

16、n", str, l); return(0); } 2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline   3.直接链接两个信令点的一组链路称作什么? PPP点到点连接   4.接入网用的是什么接口?   5.voip都用了那些协议?   6.软件测试都有那些种类? 黑盒:针对系统功效的测试    白合:测试函数功效,各函数接口   7.确定模块的功效和模块的接口是在软件设计的那个队段完成的? 概要设计阶段   8.enum string     {     x1,     x2,     x

17、3=10,     x4,     x5,     }x;    问x= 0x801005,0x8010f4  ;   9.unsigned char *p1;     unsigned long *p2;     p1=(unsigned char *)0x801000;     p2=(unsigned long *)0x810000;     请问p1+5=  ;         p2+5=  ; 三.选择题:   1.Ethternet链接到Internet用到如下那个协议?   A.HDLC;B.ARP;C.UDP;D.TCP;E.ID   2.属于网络层

18、协议的是:   A.TCP;B.IP;C.ICMP;D.X.25   3.Windows消息调度机制是:   A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;   4.unsigned short hash(unsigned short key)     {       return (key>>)%256     }    请问hash(16),hash(256)的值分别是:   A.1.16;B.8.32;C.4.16;D.1.32 四.找错题:   1.请问下面程序有什么错误?    int a[60][250][1000],i,j,k;    for(

19、k=0;k<=1000;k++)     for(j=0;j<250;j++)      for(i=0;i<60;i++)       a[i][j][k]=0; 把循环语句内外换一下   2.#define Max_CB 500     void LmiQueryCSmd(Struct MSgCB * pmsg)      {      unsigned char ucCmdNum;      ......          for(ucCmdNum=0;ucCmdNum

20、   } 死循环    3.如下是求一个数的平方的程序,请找犯错误:     #define SQUARE(a)((a)*(a))     int a=5;     int b;     b=SQUARE(a++);    4.typedef unsigned char BYTE      int examply_fun(BYTE gt_len; BYTE *gt_code)       {        BYTE *gt_buf;       gt_buf=(BYTE *)MALLOC(Max_GT_Length);       ......       if(g

21、t_len>Max_GT_Length)         {         return GT_Length_ERROR;          }         .......       } 五.问答题:    1.IP Phone的原理是什么? IPV6    2.TCP/IP通信建立的过程怎样,端口有什么作用? 三次握手,确定是哪个应用程序使用该协议    3.1号信令和7号信令有什么区分,我国某前广泛使用的是那一个?    4.列举5种以上的电话新业务? 微软亚洲技术中心的面试题!!! 1.进程和线程的差异。 线程是指进程内的一个执行单元,也是进程内的

22、可调度实体. 与进程的区分: (1)调度:线程作为调度和分派的基本单位,进程作为拥有资源的基本单位 (2)并发性:不但进程之间能够并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但能够访问从属于 进程的资源. (4)系统开销:在创建或撤消进程时,因为系统都要为之分派和回收资源,导致系统的开销 明显不小于创建或撤消线程时的开销。 2.测试措施 人工测试:个人复查、抽查和会审 机器测试:黑盒测试和白盒测试 2.Heap与stack的差异。 Heap是堆,stack是栈。 Stack的空间由操作系统自动分

23、派/释放,Heap上的空间手动分派/释放。 Stack空间有限,Heap是很大的自由存储区 C中的malloc函数分派的内存空间即在堆上,C++中对应的是new操作符。 程序在编译期对变量和函数分派内存都在栈上进行,且程序运行过程中函数调用时参数的传 递也在栈上进行 3.Windows下的内存是怎样管理的? 4.简介.Net和.Net的安全性。 5.客户端怎样访问.Net组件实现Web Service? 6.C/C++编译器中虚表是怎样完成的? 7.谈谈COM的线程模型。然后讨论进程内/外组件的差异。 8.谈谈IA32下的分页机制 小页(4K)两级分页模式,大页(4M)一

24、级 9.给两个变量,怎样找出一个带环单链表中是什么地方出现环的? 一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方 10.在IA32中一共有多少种措施从用户态跳到内核态? 通过调用门,从ring3到ring0,中断从ring3到ring0,进入vm86等等 11.假如只想让程序有一个实例运行,不能运行两个。像winamp同样,只能开一个窗口, 怎样实现? 用内存映射或全局原子(互斥变量)、查找窗口句柄.. FindWindow,互斥,写标志到文献或注册表,共享内存。.   12.怎样截取键盘的响应,让所有的‘a’变成‘b’? 键盘钩子SetWindowsHo

25、okEx  13.Apartment在COM中有什么用?为何要引入?  14.存储过程是什么?有什么用?有什么优点? 我的了解就是一堆sql的集合,能够建立非常复杂的查询,编译运行,因此运行一次后,以 后再运行速度比单独执行SQL快诸多  15.Template有什么特点?什么时候用? 16.谈谈Windows DNA结构的特点和优点。 网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区分? 1,进程:子进程是父进程的复制品。子进程取得父进程数据空间、堆和栈的复制品。 2,线程:相对与进程而言,线程是一个愈加接近与执行体的概念,它能够与同进程的其他 线程共

26、享数据,但拥有自己的栈空间,拥有独立的执行序列。 二者都能够提升程序的并发度,提升程序运行效率和响应时间。 线程和进程在使用上各有优缺陷:线程执行开销小,但不利于资源管理和保护;而进程正 相反。同时,线程适合于在SMP机器上运行,而进程则能够跨机器迁移。 思科 1. 用宏定义写出swap(x,y) #define swap(x, y)\ x = x + y;\ y = x - y;\ x = x - y; 2.数组a[N],存储了1至N-1个数,其中某个数重复一次。写一个函数,找出被重复的数字 .时间复杂度必须为o(N)函数原型: int do_dup(int a[],

27、int N) 3 一语句实现x是否为2的若干次幂的判断 int i = 512; cout << boolalpha << ((i & (i - 1)) ? false : true) << endl; 4.unsigned int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化 位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3转换后x=0b0110 00 01 unsigned int intvert(unsigned int x,int p,int n){ unsigned int

28、 _t = 0; unsigned int _a = 1; for(int i = 0; i < n; ++i){ _t |= _a; _a = _a << 1; } _t = _t << p; x ^= _t; return x; } 慧通: 什么是预编译 何时需要预编译: 1、总是使用不常常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包括文献和相同的编译选项。在这 种情况下,能够将所有包括文献预编译为一个预编译头。 char * const p; char const * p const char *p 上述三个有什么区分?

29、 char * const p; //常量指针,p的值不能够修改 char const * p;//指向常量的指针,指向的常量值不能够改 const char *p; //和char const *p char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc";

30、 cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl; 成果是:0 0 1 1 解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间; 而str5,str6,str7,str8是指针,它们指向相同的常量区域。 12. 如下代码中的两个sizeof使用方法有问题吗?[C易] void UpperCase( char str[] ) //

31、 将 str 中的小写字母转换成大写字母 {     for( size_t i=0; i

32、有问题。依照语法,sizeof如用于数组,只能测出静态数组的大小, 无法检测动态分派的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为 6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组有关的信息,因 此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。 一个32位的机器,该机器的指针是多少位 指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。因此指 针的位数就是4个字节了。 main() {   int a[5]={1,2,3,4,5};    int *ptr=(int *)(&a+1);

33、    printf("%d,%d",*(a+1),*(ptr-1)); } 输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行成果是2,5 &a+1不是首地址+1,系统会以为加一个a数组的偏移,是偏移了一个数组的大小(本例是5 个int) int *ptr=(int *)(&a+1); 则ptr实际是&(a[5]),也就是a+5 原因如下: &a是数组指针,其类型为 int (*)[5]; 而指针加1要依照指针类型加上一定的值, 不一样类型的指针+1之后增加的大小不一样 a是长度为5的int数组指针,因此要加 5*sizeof(int)

34、因此ptr实际是a[5] 不过prt与(&a+1)类型是不一样样的(这点很重要) 因此prt-1只会减去sizeof(int*) a,&a的地址是同样的,但意思不一样样,a是数组首地址,也就是a[0]的地址,&a是对象(数 组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5]. 1.请问如下代码有什么问题: int  main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; } 没有为str分派内存空间,将会发生异常 问题出在将一个

35、字符串复制进一个字符变量指针所指地址。虽然能够正确输出成果,但因 为越界进行内在读写而导致程序瓦解。 char* s="AAA"; printf("%s",s); s[0]='B'; printf("%s",s); 有什么错? "AAA"是字符串常量。s是指针,指向这个字符串常量,因此申明s的时候就有问题。 cosnt char* s="AAA"; 然后又因为是常量,因此对是s[0]的赋值操作是不合法的。 1、写一个“标准”宏,这个宏输入两个参数并返回较小的一个。 .#define Min(X, Y) ((X)>(Y)?(Y):(X))//结尾没有; 2、嵌入式系统中常

36、常要用到无限循环,你怎么用C编写死循环。 while(1){}或者for(;;) 3、核心字static的作用是什么? 定义静态变量 4、核心字const有什么含意? 表示常量不能够修改的变量。 5、核心字volatile有什么含意?并举出三个不一样的例子? 提示编译器对象的值也许在编译器未监测到的情况下变化。 int (*s[10])(int) 表示的是什么啊 int (*s[10])(int) 函数指针数组,每个指针指向一个int func(int param)的函数。 1.有如下体现式: int a=248; b=4;int const c=21;const

37、 int *d=&a; int *const e=&b;int const *f const =&a; 请问下列体现式哪些会被编译器严禁?为何? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f; *c 这是个什么东东,严禁 *d 说了是const, 严禁 e = &a 说了是const 严禁 const *f const =&a; 严禁 2.互换两个变量的值,不使用第三个变量。即a=3,b=5,互换之后a=5,b=3; 有两种解法, 一个用算术算法, 一个用^(异或) a = a + b; b = a - b; a = a - b; or

38、a = a^b;// 只能对int,char.. b = a^b; a = a^b; or a ^= b ^= a; 3.c和c++中的struct有什么不一样? c和c++中struct的重要区分是c中的struct不能够含有组员函数,而c++中的struct能够。 c++中struct和class的重要区分在于默认的存取权限不一样,struct默以为public,而clas s默以为private 4.#include   #include   void getmemory(char *p)   {     p=(char

39、 *) malloc(100);     strcpy(p,"hello world");   }   int main( )   {     char *str=NULL;     getmemory(str);     printf("%s/n",str);     free(str);     return 0;    } 程序瓦解,getmemory中的malloc 不能返回动态内存, free()对str操作很危险 5.char szstr[10];   strcpy(szstr,"");   产生什么成果?为何?   长度不一样样,会导致非法的OS

40、6.列举几个进程的同时机制,并比较其优缺陷。    原子操作 信号量机制    自旋锁    管程,会合,分布式系统 7.进程之间通信的途径 共享存储系统 消息传递系统 管道:以文献系统为基础 11.进程死锁的原因 资源竞争及进程推进次序非法 12.死锁的4个必要条件 互斥、祈求保持、不可剥夺、环路 13.死锁的处理 鸵鸟方略、预防方略、防止方略、检测与解除死锁 15.   操作系统中进程调度方略有哪几个? FCFS(先来先服务),优先级,时间片轮转,多级反馈 8.类的静态组员和非静态组员有何区分? 类的静态组员每个类只有一个,非静态组员每个对象一个 9

41、纯虚函数怎样定义?使用时应注意什么? virtual void f()=0; 是接口,子类必须要实现 10.数组和链表的区分 数组:数据次序存储,固定大小 连表:数据能够随机存储,大小可动态变化 12.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺陷? 应用层 表示层 会话层 运输层 网络层 物理链路层 物理层 tcp /udp属于运输层 TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。 与 TCP 不一样, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功效等。因为  UDP 比较简单

42、 UDP 头包括极少的字节,比 TCP 负载消耗少。 tcp: 提供稳定的传输服务,有流量控制,缺陷是包头大,冗余性不好 udp: 不提供稳定的服务,包头小,开销小   1:(void *)ptr 和 (*(void**))ptr的成果是否相同?其中ptr为同一个指针 .(void *)ptr 和 (*(void**))ptr值是相同的 2:int main()    {     int x=3;     printf("%d",x);     return 1;       } 问函数既然不会被其他函数调用,为何要返回1? mian中,c标准以为0表示成功

43、非0表示错误。详细的值是某中详细犯错信息 1,要对绝对地址0x100000赋值,我们能够用 (unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应当怎么做? *((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000 然后再调用它: *((void (*)())0x100000)(); 用typedef能够看得更直观些: typedef void(*)() voidFuncPtr; *((voidFuncP

44、tr)0x100000)(); 2,已知一个数组table,用一个宏定义,求出数据的元素个数 #define NTBL #define NTBL (sizeof(table)/sizeof(table[0])) 面试题: 线程与进程的区分和联系? 线程是否具备相同的堆栈? dll是否有独立的堆栈? 进程是死的,只是某些资源的集合,真正的程序执行都是线程来完成的,程序开启的时候 操作系统就帮你创建了一个根本程。 每个线程有自己的堆栈。 DLL中有无独立的堆栈,这个问题不好回答,或者说这个问题自身是否有问题。因为DLL 中的代码是被某些线程所执行,只有线程拥有堆栈,假如DLL中的

45、代码是EXE中的线程所调 用,那么这个时候是不是说这个DLL没有自己独立的堆栈?假如DLL中的代码是由DLL自己创 建的线程所执行,那么是不是说DLL有独立的堆栈? 以上讲的是堆栈,假如对于堆来说,每个DLL有自己的堆,因此假如是从DLL中动态分派的 内存,最佳是从DLL中删除,假如你从DLL中分派内存,然后在EXE中,或者另外一个DLL中 删除,很有也许导致程序瓦解 unsigned short A = 10; printf("~A = %u\n", ~A); char c=128; printf("c=%d\n",c); 输出多少?并分析过程 第一题,~A =0

46、xfffffff5,int值 为-11,但输出的是uint。因此输出 第二题,c=0x10,输出的是int,最高位为1,是负数,因此它的值就是0x00的补码就是12 8,因此输出-128。 这两道题都是在考查二进制向int或uint转换时的最高位处理。 分析下面的程序: void GetMemory(char **p,int num) {     *p=(char *)malloc(num);     }        int main() {     char *str=NULL;         GetMemory(&str,100);       

47、  strcpy(str,"hello");         free(str);         if(str!=NULL)     {         strcpy(str,"world");     }                printf("\n str is %s",str);     getchar(); }    问输出成果是什么?希望大家能说说原因,先谢谢了 输出str is world。 free 只是释放的str指向的内存空间,它自身的值还是存在的. 因此free之后,有一个好的习惯就是将str=NULL. 此时str指向空间

48、的内存已被回收,假如输出语句之前还存在分派空间的操作的话,这段存储 空间是也许被重新分派给其他变量的, 尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),不过一般会打印出 world来。 这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。 当你malloc一块内存的时候,管理库向操作系统申请一块空间(也许会比你申请的大某些 ),然后在这块空间中统计某些管理信息(一般是在你申请的内存前面一点),并将可用 内存的地址返回。不过释放内存的时候,管理库一般都不会将内存还给操作系统,因此你 是能够继续访问这块地址的,只不过。。。。。。。。楼上都说过了

49、最佳别这么干。 char a[10],strlen(a)为何等于15?运行的成果 #include "stdio.h" #include "string.h" void main() { char aa[10]; printf("%d",strlen(aa)); } sizeof()和初不初始化,没有关系; strlen()和初始化有关。 char (*str)[20];/*str是一个数组指针,即指向数组的指针.*/ char *str[20];/*str是一个指针数组,其元素为指针型数据.*/ long a=0x801010; a+5=? 0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720 ,再加上5就是8392725罗

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服