网站大量收购独家精品文档,联系QQ:2885784924

应聘C语言类工作职位面试题大汇总7.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
应聘C语言类工作职位面试题大汇总7

C语言笔试面试题  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表示成功,非0表示错误。具体的值是某中具体出错信息  1,要对绝对地址0x100000赋值,我们可以用   (unsigned int*)0x100000 = 1234;   那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?   *((void (*)( ))0x100000 ) ( );   首先要将0x100000强制转换成函数指针,即:   (void (*)())0x100000   然后再调用它:   *((void (*)())0x100000)();   用typedef可以看得更直观些:   typedef void(*)() voidFuncPtr;   *((voidFuncPtr)0x100000)();   2,已知一个数组table,用一个宏定义,求出数据的元素个数   #define NTBL   #define NTBL (sizeof(table)/sizeof(table[0]))   面试题: 线程与进程的区别和联系? 线程是否具有相同的堆栈? dll是否有独立的堆栈?   进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。   每个线程有自己的堆栈。   DLL 中有没有独立的堆栈,这个问题不好回答,或者说这个问题本身是否有问题。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是 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 =0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285   第二题,c=0x10,输出的是int,最高位为1,是负数,所以它的值就是0x00的补码就是128,所以输出-128。   这两道题都是在考察二进制向int或uint转换时的最高位处理。   分析下面的程序:   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();   }   问输出结果是什么?希望大家能说说原因,先谢谢了   输出str is world。   free 只是释放的str指向的内存空间,它本身的值还是存在的.   所以free之后,有一个好的习惯就是将str=NULL.   此时str指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段存储空间是可能被重新分配给其他变量的,   尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了),但是通常会打印出world来。   这是因为,进程中的内存管理一般不是由操作系统完成的,而是由库函数自己完成的。   当你malloc一块内存的时候,管理库向操作系统申请一块空间(可能会比你申请的大一些),然后在这块空间中记录一些管理信息(一般是在你申请的内存前面一点),并将可用内存的地址返回。但是释放内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续访问这块地址的,只不过。。。。。。。。楼上都说过了,最好别这么干。   char a[10],strlen(a)为什么等于15?运行的结果   #include stdio.h   #include

文档评论(0)

shaoyifen + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档