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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

mfc面试题.docx

1、mfc面试题1. 什么是预编译 何时需要预编译:、总是使用不经常改动的大型代码体。 、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。2. char * const p;char const * pconst char *p上述三个有什么区别?char * const p; /常量指针,p的值不可以修改char const * p;/指向常量的指针,指向的常量值不可以改const char *p; /和char const *p3. char str1 = abc;char str2 = abc;const char

2、str3 = abc;const char str4 = abc;const char *str5 = abc;const char *str6 = abc;char *str7 = abc;char *str8 = abc;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是指针,它们指向相同的常量

3、区域。4. 以下代码中的两个sizeof用法有问题吗?void UpperCase( char str ) / 将 str 中的小写字母转换成大写字母 for( size_t i=0; isizeof(str)/sizeof(str0); +i ) if( a=stri & stri=z ) stri -= (a-A );char str = aBcDe;cout str字符长度为: sizeof(str)/sizeof(str0) endl;UpperCase( str );cout str (Y)?(Y):(X)/结尾没有;9. 关键字volatile有什么含意?并举出三个不同的例子?提示

4、编译器对象的值可能在编译器未监测到的情况下改变。10. int (*s10)(int) 表示的是什么啊int (*s10)(int) 函数指针数组,每个指针指向一个int func(int param)的函数。11. 有以下表达式: int a=248; 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 说了是con

5、st 禁止const *f const =&a; 禁止12. 交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;有两种解法, 一种用算术算法, 一种用(异或)a = a + b;b = a - b;a = a - b; ora = ab;/ 只能对int,char.b = ab;a = ab;ora = b = a;13. c和c+中的struct有什么不同?c和c+中struct的主要区别是c中的struct不可以含有成员函数,而c+中的struct可以。c+中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默

6、认为private14. #include #include void getmemory(char *p) p=(char *) 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操作很危险15. char szstr10; strcpy(szstr,0123456789); 产生什么结果?为什么? 长度不

7、一样,会造成非法的操作,破坏其他内存区的数据16. 列举几种进程的同步机制,并比较其优缺点。 原子操作 信号量机制 自旋锁 管程,会合,分布式系统17. 进程之间通信的途径共享存储系统消息传递系统管道:以文件系统为基础18. 进程死锁的原因资源竞争及进程推进顺序非法19. 死锁的4个必要条件互斥、请求保持、不可剥夺、环路20. 死锁的处理鸵鸟策略、预防策略、避免策略、检测与解除死锁21. 操作系统中进程调度策略有哪几种?FCFS(先来先服务),优先级,时间片轮转,多级反馈22. 纯虚函数如何定义?使用时应注意什么?virtual void f()=0;是接口,子类必须要实现23. 数组和链表的

8、区别数组:数据顺序存储,固定大小连表:数据可以随机存储,大小可动态改变24. ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?应用层表示层会话层运输层网络层物理链路层物理层tcp /udp属于运输层TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好udp: 不提供稳定的服务,包头小,开销小 25. (void

9、*)ptr 和 (*(void*)ptr的结果是否相同?其中ptr为同一个指针.(void *)ptr 和 (*(void*)ptr值是相同的26. int main() int x=3; printf(%d,x); return 1; 问函数既然不会被其它函数调用,为什么要返回1?mian中,c标准认为0表示成功,非0表示错误。具体的值是某中具体出错信息27. 要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234;那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?*(void (*)( )0x100000 ) ( );首先

10、要将0x100000强制转换成函数指针,即:(void (*)()0x100000然后再调用它:*(void (*)()0x100000)();用typedef可以看得更直观些:typedef void(*)() voidFuncPtr;*(voidFuncPtr)0x100000)();28. 已知一个数组table,用一个宏定义,求出数据的元素个数#define NTBL#define NTBL (sizeof(table)/sizeof(table0)29. 线程与进程的区别和联系? 线程是否具有相同的堆栈? dll是否有独立的堆栈?进程是死的,只是一些资源的集合,真正的程序执行都是线程

11、来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?以上讲的是堆栈,如果对于堆来说,每个DLL有自己的堆,所以如果是从DLL中动态分配的内存,最好是从DLL中删除,如果你从DLL中分配内存,然后在EXE中,或者另外一个DLL中删除,很有可能导致程序崩溃30. unsig

12、ned short A = 10;printf(A = %un, A);char c=128; printf(c=%dn,c);输出多少?并分析过程第一题,A 0xfffffff5,int值 为11,但输出的是uint。所以输出4294967285第二题,c0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出128。这两道题都是在考察二进制向int或uint转换时的最高位处理。31. 分析下面的程序:void GetMemory(char *p,int num) *p=(char *)malloc(num); int main() char *str=

13、NULL; GetMemory(&str,100); 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指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的,尽管这段程序确实是存在大大的问题(

14、上面各位已经说得很清楚了),但是通常会打印出world来。这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。当你malloc一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这块地址的,只不过。楼上都说过了,最好别这么干。32. char a10,strlen(a)为什么等于15?运行的结果#include stdio.h#include string.hvoid main()cha

15、r aa10;printf(%d,strlen(aa);sizeof()和初不初始化,没有关系;strlen()和初始化有关。char (*str)20;/*str是一个数组指针,即指向数组的指针*/char *str20;/*str是一个指针数组,其元素为指针型数据*/33. 给定结构struct A char 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

16、; / 偏移2字节保证4字节对齐; / 共8字节34. #include #include #include #include #include #include typedef struct AA int b1:5; int b2:2;AA;void main() AA aa; char cc100; strcpy(cc,0123456789abcdefghijklmnopqrstuvwxyz); memcpy(&aa,cc,sizeof(AA); cout aa.b1 endl; cout aa.b2 0 & b0 &(*ca | *cb) | (a0 & ba | *cb); 什么破玩意

17、37. 改错: 非常好的例子 #include int main(void) int *p; int arr100; p = &arr; return 0;解答:搞错了,是指针类型不同,int *p; /二级指针&arr; /得到的是指向第一维为100的数组的指针#include int main(void) int *p, *q;int arr100;q = arr;p = &q;return 0;38. 下面这个程序执行后会有什么错误或者效果: #define MAX 255 int main() unsigned char AMAX,i;/i被定义为unsigned char for (

18、i=0;i=MAX;i+) Ai=i;解答:死循环加数组越界访问(C/C+不进行数组越界检查)MAX=255 数组A的下标范围为:0.MAX-1,这是其一.其二.当i循环到255时,循环内执行: A255=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,sizeo

19、f(struct name2)=12在第二个结构中,为保证num按四个字节对齐,char后必须留出3字节的空间;同时为保证整个结构的自然对齐(这里是4字节对齐),在x后还要补齐2个字节,这样就是12字节。intel40. A.c 和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。他们都放在数据区,但是编译器对他们的命名是不同的。如果要使变量在其他模块也有意义的话,需要使用extern关键字。42. 输出和为一个给定整数的所有组合例如

20、n=55=1+4;5=2+3(相加的数不能重复)则输出1,4;2,3。#include int main(void)unsigned long int i,j,k;printf(please input the 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=

21、1;scanf(%d,&a);if(a%2=0) for(i=1;ia/2;i+) printf(%d,a,a-i);elsefor(i=1;i=a/2;i+) printf( %d, %d,i,a-i);兄弟,这样的题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例子,可谓是反序的经典例程.(好龟)void inverse(char *p) if( *p = = 0 ) return; inverse( p+1 ); printf( %c, *p );int main(int argc, char *argv) inverse(abc0); return 0;43. 在对齐为

22、4的情况下struct BBB long num; char *name; short int data; char ha; short ba5;*p;p=0x1000000;p+0x200=_;(Ulong)p+0x200=_;(char*)p+0x200=_;希望各位达人给出答案和原因,谢谢拉解答:假设在32位CPU上,sizeof(long) = 4 bytes 好例子sizeof(char *) = 4 bytessizeof(short int) = sizeof(short) = 2 bytessizeof(char) = 1 bytes由于是4字节对齐,sizeof(struct

23、 BBB) = sizeof(*p) = 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C+验证)p=0x1000000;p+0x200=_; = 0x1000000 + 0x200*24(Ulong)p+0x200=_; = 0x1000000 + 0x200(char*)p+0x200=_; = 0x1000000 + 0x200*4可以参考一下指针运算的细节44. 写一段程序,找出数组中第k大小的数,输出数所在的位置。例如2,4,3,4,7中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k) 要求算法复杂度不能是O(n2)谢谢!可以先用快速排序进行排序,其中用另

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2