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

加入VIP,免费下载
 

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

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(mfc面试题.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

mfc面试题.docx

1、mfc面试题1. 什么是预编译 何时需要预编译:、老是利用不常常改动的大型代码体。 、程序由多个模块组成,所有模块都利用一组标准的包括文件和相同的编译选项。在这种情形下,能够将所有包括文件预编译为一个预编译头。2. char * const p;char const * pconst 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;ch

2、ar *str7 = abc;char *str8 = abc;cout ( str1 = str2 ) endl;cout ( str3 = str4 ) endl;cout ( str5 = str6 ) endl;cout ( str7 = str8 ) (Y)?(Y):(X) 关键字volatile有什么含义?并举出三个不同的例子?提示编译器对象的值可能在编译器未监测到的情形下改变。10. int (*s10)(int) 表示的是什么啊int (*s10)(int) 函数指针数组,每一个指针指向一个int func(int param)的函数。11. 有以下表达式: int a=248

3、; b=4;int const c=21;const 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; 禁止12. 互换两个变量的值,不利用第三个变量。即a=3,b=5,互换以后a=5,b=3;有两种解法, 一种用算术算法, 一种用(异或)a = a + b;b = a - b;a = a - b; o

4、ra = ab;b = ab;a = ab;ora = b = a;13. c和c+中的struct有什么不同?c和c+中struct的要紧区别是c中的struct不能够含有成员函数,而c+中的struct能够。c+中struct和class的要紧区别在于默许的存取权限不同,struct默以为public,而class默以为private14. #include #include void getmemory(char *p) p=(char *) malloc(100); 正适合的?问题 strcpy(p,hello world); int main( ) char *str=NULL; g

5、etmemory(str); printf(%s/n,str); free(str); return 0; 程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险15. char szstr10; strcpy(szstr,09); 产生什么结果?什么缘故? 长度不一样,会造成非法的操作,破坏其他内存区的数据16. 列举几种进程的同步机制,并比较其优缺点。 原子操作 信号量机制 自旋锁 管程,会合,散布式系统17. 进程之间通信的途径共享存储系统消息传递系统管道:以文件系统为基础18. 进程死锁的缘故资源竞争及进程推动顺序非法19. 死锁的4个必要条件

6、互斥、请求维持、不可剥夺、环路20. 死锁的处置鸵鸟策略、预防策略、幸免策略、检测与解除死锁21. 操作系统中进程调度策略有哪几种?FCFS(先来先效劳),优先级,时刻片轮转,多级反馈22. 纯虚函数如何概念?利历时应注意什么?virtual void f()=0;是接口,子类必需要实现23. 数组和链表的区别数组:数据顺序存储,固定大小连表:数据能够随机存储,大小可动态改变24. ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?应用层表示层会话层运输层网络层物理链路层物理层tcp /udp属于运输层TCP 效劳提供了数据流传输、靠得住性、有效流操纵、全双工操作和

7、多路复用技术等。与 TCP 不同, UDP 并非提供对 IP 协议的靠得住机制、流操纵和错误恢复功能等。由于 UDP 比较简单, UDP 头包括很少的字节,比 TCP 负载消耗少。tcp: 提供稳固的传输效劳,有流量操纵,缺点是包头大,冗余性不行udp: 不提供稳固的效劳,包头小,开销小 25. (void *)ptr 和 (*(void*)ptr的结果是不是相同?其中ptr为同一个指针.(void *)ptr 和 (*(void*)ptr值是相同的26. int main() int x=3; printf(%d,x); return 1; 问函数既然可不能被其它函数挪用,什么缘故要返回1?

8、mian中,c标准以为0表示成功,非0表示错误。具体的值是某中具体犯错信息27. 要对绝对地址0x100000赋值,咱们能够用(unsigned int*)0x100000 = 1234;那么若是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?*(void (*)( )0x100000 ) ( );第一要将0x100000强制转换成函数指针,即:(void (*)()0x100000然后再挪用它:*(void (*)()0x100000)();用typedef能够看得更直观些:typedef void(*)() voidFuncPtr;*(voidFuncPtr)0x100000)

9、();28. 已知一个数组table,用一个宏概念,求出数据的元素个数#define NTBL#define NTBL (sizeof(table)/sizeof(table0)29. 线程与进程的区别和联系? 线程是不是具有相同的堆栈? dll是不是有独立的堆栈?进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每一个线程有自己的堆栈。DLL中有无独立的堆栈,那个问题不行回答,或说那个问题本身是不是有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,若是DLL中的代码是EXE中的线程所挪用,那么那个时候是不是说那个DLL

10、没有自己独立的堆栈?若是DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,若是关于堆来讲,每一个DLL有自己的堆,因此若是是从DLL中动态分派的内存,最好是从DLL中删除,若是你从DLL中分派内存,然后在EXE中,或另外一个DLL中删除,很有可能致使程序崩溃30. unsigned short A = 10;printf(A = %un, A);char c=128; printf(c=%dn,c);输出多少?并分析进程第一题,A 0xfffffff5,int值 为11,但输出的是uint。因此输出85第二题,c0x10,输出的是int,最高位为1,

11、是负数,因此它的值确实是0x00的补码确实是128,因此输出128。这两道题都是在考察二进制向int或uint转换时的最高位处置。31. 分析下面的程序:void GetMemory(char *p,int num) *p=(char *)malloc(num); int main() char *str=NULL; GetMemory(&str,100); strcpy(str,hello); free(str); if(str!=NULL) strcpy(str,world); printf(n str is %s,str); getchar(); 问输出结果是什么?希望大伙儿能说说缘故,

12、先谢谢了输出str is world。free 只是释放的str指向的内存空间,它本身的值仍是存在的.因此free以后,有一个好的适应确实是将str=NULL.现在str指向空间的内存已被回收,若是输出语句之前还存在分派空间的操作的话,这段存储空间是可能被从头分派给其他变量的,尽管这段程序确实是存在大大的问题(上面列位已经说得很清楚了),可是通常会打印出world来。这是因为,进程中的内存治理一样不是由操作系统完成的,而是由库函数自己完成的。当你malloc一块内存的时候,治理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些治理信息(一样是在你申请的内存前面一点),

13、并将可用内存的地址返回。可是释放内存的时候,治理库通常都可不能将内存还给操作系统,因此你是能够继续访问这块地址的,只只是。楼上都说过了,最好别这么干。32. char a10,strlen(a)什么缘故等于15?运行的结果#include #include void main()char aa10;printf(%d,strlen(aa);sizeof()和初不初始化,没有关系;strlen()和初始化有关。char (*str)20;/*str是一个数组指针,即指向数组的指针*/char *str20;/*str是一个指针数组,其元素为指针型数据*/33. 给定结构struct A char

14、 t:4; char k:4; unsigned short i:8; unsigned long m;问sizeof(A) = ?给定结构struct A char t:4; 4位 char k:4; 4位 unsigned short i:8; 8位 unsigned long m; #include #include #include #include #include #include typedef struct AA int b1:5; int b2:2;AA;void main() AA aa; char cc100; strcpy(cc,09abcdefghijklmnopqr

15、stuvwxyz); memcpy(&aa,cc,sizeof(AA); cout endl; cout 0 & b0 &(*ca | *cb) | (a0 & ba | *cb); 什么破玩意37. 改错: 超级好的例子 #include int main(void) int *p; int arr100; p = &arr; return 0;解答:弄错了,是指针类型不同,int *p; 下面那个程序执行后会有什么错误或成效: #define MAX 255 int main() unsigned char AMAX,i;MAX-1,这是其一.其二.当i循环到255时,循环内执行: A25

16、5=255;这句本身没有问题.可是返回for (i=0;i=MAX;i+)语句时,由于unsigned char的取值范围在(0.255),i+以后i又为0了.无穷循环下去.39. struct name1 char str; short x; int num;struct name2 char str; int num; short x;sizeof(struct name1)=8,sizeof(struct name2)=12在第二个结构中,为保证num按四个字节对齐,char后必需留出3字节的空间;同时为保证整个结构的自然对齐(那个地址是4字节对齐),在x后还要补齐2个字节,如此确实是1

17、2字节。intel40. 和两个c文件中利用了两个相同名字的static变量,编译的时候会可不能有问题?这两个static变量会保留到哪里(栈仍是堆或其他的)?static的全局变量,说明那个变量仅在本模块中成心义,可不能阻碍其他模块。他们都放在数据区,可是编译器对他们的命名是不同的。若是要使变量在其他模块也成心义的话,需要利用extern关键字。42. 输出和为一个给定整数的所有组合例如n=55=1+4;5=2+3(相加的数不能重复)那么输出1,4;2,3。#include int main(void)unsigned long int i,j,k;printf(please input t

18、he numbern);scanf(%d,&i); if( i % 2 = 0) j = i / 2;elsej = i / 2 + 1;printf(The result is n); for(k = 0; k j; k+) printf(%d = %d + %dn,i,k,i - k);return 0;#include void main()unsigned long int a,i=1;scanf(%d,&a);if(a%2=0) for(i=1;ia/2;i+) printf(%d,a,a-i);elsefor(i=1;inext!=NULL&qa-next!=NULL)if(pa-

19、dataqa-data)ra-next=qa;qa=qa-next;elsera-next=pa;pa=pa-next;if(pa-next!=NULL)ra-next=pa;if(qa-next!=NULL)ra-next=qa;return R;47. 用递归算法判定数组aN是不是为一个递增数组。递归的方式,记录当前最大的,而且判定当前的是不是比那个还大,大那么继续,不然返回false终止:bool fun( int a, int n )if( n= =1 )return true;if( n= =2 )return an-1 = an-2;return fun( a,n-1) & ( an-1 = an-2 );51. 单连表的成立,把a-z26个字母插入到连表中,而且倒叙,还要打印!方式1:typedef struct val int date_1; struct val *next;*p;void main(void) char c; for(c=122;c=97;c-) =c; p=p-next; =NULL; 方式2:node *p = NULL;node *q = NULL;node *head = (node*)malloc(sizeof(node);head-data = ;head

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1