- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
it公司笔试面试题总结.
1. 引用与指针有什么区别?? ???1) 引用必须被初始化,指针不必。? ???2) 引用初始化以后不能被改变,指针可以改变所指的对象。? ???3) 不存在指向空值的引用,但是存在指向空值的指针。2. 堆栈溢出一般是由什么原因导致的?? ?? ? 没有回收垃圾资源。3. 什么函数不能声明为虚函数?? ?? ? constructor函数不能声明为虚函数。4. 写出float x 与“零值”比较的if语句。? ?? ? if(x0.000001x-0.000001)5. 不能做switch()的参数类型是:? ?? ?switch的参数不能为实型6. 头文件中的 ifndef/define/endif干什么用? 预处理答:防止头文件被重复引用7. #include filename.h 和 #include filename.h 有什么区别?答:对于#include filename.h ,编译器从标准库路径开始搜索filename.h对于#include filename.h ,编译器从用户的工作路径开始搜索filename.h8. 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern C修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。9.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;cout ( str1 == str2 ) endl;cout ( str3 == str4 ) endl;cout ( str5 == str6 ) endl;cout ( str7 == str8 ) endl;结果是:0 0 1 1str1,str2,str3,str4是数组变量,它们有各自的内存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。10.main(){? ? int a[5]={1,2,3,4,5};? ? int *ptr=(int *)(a+1);? ? 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)。所以ptr实际是a[5]。但是prt与(a+1)类型是不一样的(这点很重要),所以prt-1只会减去sizeof(int*)。a,a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],a+1是下一个对象的地址,即a[5]。11. 交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后a=5,b=3;答:有两种解法, 一种用算术算法, 一种用^(异或)a = a + b;b = a - b;a = a - b;ora = a^b;// 只能对int,char..b = a^b;a = a^b;ora ^= b ^= a;12. 列举几种进程的同步机制,并比较其优缺点。答:原子操作、信号量机制、自旋锁、管程、会合、分布式系统13. 进程死锁的原因和4个必要条件答:资源竞争及进程推进顺序非法;互斥、请求保持、不可剥夺、环路14. 要对绝对地址0x100000赋值,我们可以用(unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?答:*((void (*)( ))0x100000 ) ( );首先要将0x100000强制转换成函数指针,即: (void (*)())0x100000。然后再调用它: *((void (*)())0x100000)(); 用typedef可以看得更直观些:typedef void(*)() voidFuncPtr;
文档评论(0)