程序员笔试面试

上传人:hs****ma 文档编号:496471868 上传时间:2023-07-05 格式:DOC 页数:77 大小:1.32MB
返回 下载 相关 举报
程序员笔试面试_第1页
第1页 / 共77页
程序员笔试面试_第2页
第2页 / 共77页
程序员笔试面试_第3页
第3页 / 共77页
程序员笔试面试_第4页
第4页 / 共77页
程序员笔试面试_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《程序员笔试面试》由会员分享,可在线阅读,更多相关《程序员笔试面试(77页珍藏版)》请在金锄头文库上搜索。

1、先发基本本问题,再再发编程程问题.想成为嵌嵌入式程程序员应应知道的的0x110个基本本问题:1:(vvoidd *)ptrr 和 (*(vooid*)ptrr的结果果是否相相同?其其中ptr为同一一个指针针.(vooid *)pptr 和 (*(vooid*)ptrr值是相相同的2:innt mmainn() intt x=3; priintff(%d,x); retturnn 1; 问函数既既然不会会被其它它函数调调用,为为什么要要返回 1?miann中,c标准认认为0表示成成功,非非0表示错错误。具具体的值值是某中中具体出出错信息息1,要对对绝对地地址0x11000000赋值,我我们可以以

2、用(unssignned intt*)00x10000000 = 12234;那么要是是想让程程序跳转转到绝对对地址是是0x11000000去执行行,应该该怎么做做?*(vvoidd (*)( )00x10000000 ) ( );首先要将将0x11000000强制转转换成函函数指针针,即:(voiid (*)()00x10000000然后再调调用它:*(vvoidd (*)()0xx10000000)();用typpedeef可以看看得更直直观些:typeedeff vooid(*)() vvoiddFunncPttr;*(vvoiddFunncPttr)00x10000000)();2,已

3、知知一个数数组tabble,用一一个宏定定义,求求出数据据的元素素个数#deffinee NTTBL#deffinee NTTBL (siizeoof(ttablle)/sizzeoff(taablee0)面试题: 线程与与进程的的区别和和联系? 线程是是否具有有相同的的堆栈? ddll是否有有独立的的堆栈?进程是死死的,只只是一些些资源的的集合,真真正的程程序执行行都是线线程来完完成的,程程序启动动的时候候操作系系统就帮帮你创建建了一个个主线程程。每个线程程有自己己的堆栈栈。DLL中中有没有有独立的的堆栈,这这个问题题不好回回答,或或者说这这个问题题本身是是否有问问题。因因为DLL中的代代码

4、是被被某些线线程所执执行,只只有线程程拥有堆堆栈,如如果DLL中的代代码是EXE中的线线程所调调用,那那么这个个时候是是不是说说这个DLL没有自自己独立立的堆栈栈?如果果DLL中的代代码是由由DLL自己创创建的线线程所执执行,那那么是不不是说DLL有独立立的堆栈栈?以上讲的的是堆栈栈,如果果对于堆堆来说,每每个DLL有自己己的堆,所所以如果果是从DLL中动态态分配的的内存,最最好是从从DLL中删除除,如果果你从DLL中分配配内存,然然后在EXE中,或或者另外外一个DLL中删除除,很有有可能导导致程序序崩溃unsiigneed sshorrt AA = 10;prinntf(AA = %un,

5、AA);charr c=1288; prinntf(c=%dn,c);输出多少少?并分分析过程程第一题,A 0xfffffff5,int值 为11,但输出的是uint。所以输出4294967285第二题,c0x110,输出的的是int,最高高位为1,是负负数,所所以它的的值就是是0x000的补码码就是128,所以以输出128。这两道题题都是在在考察二二进制向向int或uinnt转换时时的最高高位处理理。分析下面面的程序序:voidd GeetMeemorry(ccharr *p,iint numm) *p=(chhar *)mmallloc(numm); int maiin() chaar *

6、strr=NUULL; GettMemmoryy(&sstr,1000); strrcpyy(sttr,helllo); freee(sstr); if(strr!=NNULLL) sttrcppy(sstr,woorldd); priintff(n sstr is %s,sttr); gettchaar(); 问输出结结果是什什么?希希望大家家能说说说原因,先先谢谢了了输出sttr iis wworlld。freee 只是释释放的str指向的的内存空空间,它本身身的值还还是存在在的.所以frree之后,有有一个好好的习惯惯就是将将strr=NUULL.此时sttr指向空空间的内内存已被被回收

7、,如果输输出语句句之前还还存在分分配空间间的操作作的话,这段存存储空间间是可能能被重新新分配给给其他变变量的,尽管这段段程序确确实是存存在大大大的问题题(上面面各位已已经说得得很清楚楚了),但但是通常常会打印印出worrld来。这是因为为,进程程中的内内存管理理一般不不是由操操作系统统完成的的,而是是由库函函数自己己完成的的。当你maallooc一块内内存的时时候,管管理库向向操作系系统申请请一块空空间(可可能会比比你申请请的大一一些),然然后在这这块空间间中记录录一些管管理信息息(一般般是在你你申请的的内存前前面一点点),并并将可用用内存的的地址返返回。但但是释放放内存的的时候,管管理库通通

8、常都不不会将内内存还给给操作系系统,因因此你是是可以继继续访问问这块地地址的,只只不过。楼上上都说过过了,最最好别这这么干。charr a10,sttrleen(aa)为什么么等于一一五?运运行的结结果#inccludde stddio.h#inccludde strringg.hvoidd maain()charr aaa100;prinntf(%dd,sstrllen(aa);sizeeof()和初不不初始化化,没有有关系;strllen()和初始始化有关关。charr (*strr)220;/*sstr是一个个数组指指针,即即指向数数组的指指针*/charr *sstr20;/*strr

9、是一个个指针数数组,其其元素为为指针型型数据*/longg a=0x88010010;a+5=?0x80010110用二进进制表示示为:“10000 000000 00001 00000 000011 00000”,十进进制的值值为839927220,再加加上5就是839927225罗1)给定定结构strructt A chaar tt:4; chaar kk:4; unssignned shoort i:88; unssignned lonng mm;问ssizeeof(A) = ?给定结构构strructt A chaar tt:4; 4位 chaar kk:4; 4位 unssignne

10、d shoort i:88; 88位 unssignned lonng mm; / 偏移2字节保保证4字节对对齐; / 共8字节2)下面面的函数数实现在在一个数数上加一一个数,有有什么错错误?请请改正。int addd_n ( iint n ) staaticc innt ii = 1000; i += nn; retturnn i;当你第二二次调用用时得不不到正确确的结果果,难道道你写个个函数就就是为了了调用一一次?问问题就出出在 sttatiic上?/ 帮帮忙分析析一下#inccludde#inccludde #inccludde #inccludde #inccludde #inccludde typeedeff sttrucct AA innt bb1:55; innt bb2:22;AA;voidd maain() AAA aaa; chhar cc1000; sstrccpy(cc,0112344567789aabcddefgghijjklmmnoppqrsstuvvwxyyz); memmcpyy(&aaa,ccc,ssizeeof(AA); coout aa.b1 eendll; coout aa.b2 0 & bb0 &(*ca | *

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

当前位置:首页 > 商业/管理/HR > 商业计划书

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