linux及面试题-c语言常见笔试_第1页
linux及面试题-c语言常见笔试_第2页
linux及面试题-c语言常见笔试_第3页
linux及面试题-c语言常见笔试_第4页
linux及面试题-c语言常见笔试_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

c【1#ifdefNDEBUG#defineTRACE(S)S#defineTRACE(S)printf("%s;\n",#S);S#error#defineNELEMENTS(array)#defineOFFSET(structure,member)【2数据和定义给定以下类型的变量aAnApointertoanApointertoapointertoanAnarrayof10Anarrayof10pointerstoApointertoanarrayof10Apointertoa<I>function</I>thattakesanintegerasanargumentandreturnsanAnarrayoftenpointersto<I>function</I>sthattakeanintegerargumentandreturnan(1charx(2jmp_buftypedefstruct{ }jmp_buf[1];setjmp函数的原型:externintsetjmp(jmp_bufsetjmp时传递env【5#ifndefINCvxWorksh#defineINCvxWorksh#ifdefcplusplusextern"C"{#ifdef}#endif/*INCvxWorksh【6staticstatic3/*file.c*/staticinta;intb;staticint{staticintx;inty;}【7constconstinta1;intconsta2;constint*a3;int*constintconst*const【8volatilevolatilevolatileintvolatileconstvolatileconstint【9sizeof()】char*pmsg="A";charmsg[]="A";charch ='A';sizeof(pmsg)=? =? =? = =?(C++中等于多少?)voidf(charparam[100]){//sizeof(param)=}【10字符串】char*pmsg="o,world!";strcpy(pmsg,"hi,there.");【11混合运算】voidfoo(){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=}请问调用foo()【12内存】voidfn(){inta[100];int*p;p=(int*)((unsignedint)a+1);printf(“p=0x%x\n”,*p);}【13Cvoidperror(constchar*s);fdprintf(intconstchar*,isspace(),isxdigit(),strerr(),coon@23:44:01|阅读全文|评论0|0|编c语言笔试题(九)Tag:C#include"stdio.h"intmain(){inta;intp=*p=a=(inta=(int)(&(*p));if(a==(int)p)printf("equal!\n");printf("notequal}struct intbit0:1; intbit1:1; int intbit3:1; intbit4:1; intbit5:1; intbit6:1; intbitsmybits;的定义是否正确?如果不正确,要如何修改上述的结构定义才能使该语句正确?修改后的结构定义是否会影响sizeof(bits)的正确性?如果正确则该表达式的值为多少?如果将上述的intcharsizeof(bits)的大小为多少?答案:1)sizeof后面的内容可以是类型,也可以是变量。typedefstruct{ intbit0:1; intbit1:1; int intbit3:1; intbit4:1; intbit5:1; intbit6:1; intsizeof(bits)4char1VCstructunsignedint}structa{ char }都会认为structa是未定义的类型,即使提前也不会有任何用处。stackframeleave指令相当于:movebp,esp;poptest1函 test2函 test3函printf“%d%d\n”,++n,power(2,n));power(2,n)2^n。答案:编译器的不同,对++npower(2,n)处理的先后顺序不一样,形成二义性,造成程序的移植性差,因此最好把++nprintf函数外面,以消除二义性。printf在源码中使用条件编译语句,然后在编译命令令中加入宏定义命令const*pconstmalloc()calloc()的区别?malloc(size_tsize);calloc(size_tn,size_tmallocsize大小的内存块,而callocn*size"\n" 包含预定义头文件< 和""的区别答案:只在指定的里寻找被包含文件;先在当前下查找,再在指定下查找;通常<>方式用于系统的头文件,而一般用户的头文件用""的方式。 intvoid{intstruntS_Afor(i=0,i<10,i++)s_ptr->a[i]=i;}coon@23:37:37|阅读全文|评论0|0|编c语言笔试题(八)Tag:C#pragmapack(8)structs1{shorta;longstructs2{charc;s1d;longlong#pragma问1.sizeof(s2)=2.s2s1中的a后面空了几个字节接着是网友rwxybh(行云)的答案:1***24VC2005#pragmapack(8)structshorta;//2BYteslongb;//4Bytesstructcharc;//1Bytes1d;//8Byteslonglonge;//8//1***//00010203040506//00010203040506//00010203040506#pragmaintmain(intargc,char*{s2char*p=(char*)&a;for(inti=0;i<24;++i)p[i]=(char)(i%8);return0;}redleaves(ID最吊的网友)的答案和分析:#pragmapack(8)structS1{chara;longstructS2{charc;structS1d;longlong#pragmapack()sizeof(S2)24.个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(8字节)中较小的一个对齐.S1中,a11字节对齐,8,1,a1字节对齐;4个字节,4字节对齐,4字节对齐,sizeof(S1)S2中,cS1a一样,1字节对齐,d是个结构,8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的对齐参数中最大的一个,S14.所以,d就是按4字节对齐.e8个字节,8字节对齐,和指定的一样,8字节的边界上,这时12个字节了,4个字节的空,16e.这时,24,8(e8字节对齐)整除.这样,24个字节.abcS1.aS1.bdS2复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度对齐后的长度必须是成员中最大的对齐参数的整数倍,xue23(xue23)s2cout<<"ss.c="<<&ss<<endl;cout<<"ss.d.a="<<&ss.d.a<<endl;cout<<"ss.d.b="<<&(ss.d.b)< cout"ss.d&ss.eendl;printout各个变量的内存地址不就可以看出来了吗。不知为什么会c和a8coon@23:35:17|阅读全文|评论0|0|编c语言笔试题(七)Tag:C{charchar*str1=" strcpy(string,str1);}{charstring[10],str1[10];for(I=0;I<10;I++){str1[i]}strcpy(string,}{charstring[10];{strcpy(string,}}#defineMAX_SRMDSN{staticintSRM_no;intI;SRM_no%=MAX_SRM;{}}return(NULL_SRM);return}intsum(int{

autointc=0;staticint}void{intint{printf("%d,",}}intfunc(int{intb;{}return}

case1:case2:case3:default:inta[0]=0;a[1]=1;int*p,*q;a[q-定义int**a[3][4],则变量占有的内存空间为 5959200511000coon@23:34:38|阅读全文|评论0|0|编c语言笔试题(六)Tag:C4.static有什么用途?(请至少说明两种7.与指针有什么区别1)必须被初始化,指针不必2)初始化以后不能被改变,指针可以改变所指的对象2)不存在指向空值的,但是存在指向空值的指针没有回收资源什么函数不能为虚函数floatxiftcp/ip应用层/传输层/网络层/数据链路层/(2.M,N1NMC程3.switch()的参数类型是:switch的参数不能为实型。3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来同名全局变量。可以在不同的C文件中同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时4for(;1;)有什么问题?它是什么意思?while(1)相同。5、do……while和while……do{inta,b,c,d;return}1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态方从以上分析可以看出,把局部变量改变为静态变量后是改变了它的方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数;static2、程序的局部变量存在于(堆栈)中,全局变量存在于()中,动态申请数据存在于()typedefunion{longi;intk[5];charc;}DATE;structdata{intcat;DATEcow;doubledog;}too;DATEmax; 答:DATEunion,变量公用空间.int[5],20个字节.所以它的大小20datastruct,每个变量分开占用空间.int4DATE20double820+32当然...16位编辑器下int2字节,int2DATE10double820intinc(int{}int{}typedefint(FUNC1)(inttypedefint(FUNC2)voidshow(FUNC2fun,intarg1,{inttemp=p(arg1);fun(&temp,&arg1,arg2);}{inta;return0;}3、4、char*src=" 5、char*dest=NULL;6int7dest=(char*)malloc(len);8、char*d=dest;9char*s=src[len];10while(len--!=0)11、d++=s--;12printf("%s",dest);13、return0;14、1:intmain(){char*src="o,world";intlen=strlen(src);char*destchar*)malloc(len+1);//要为分配一个空间char*d=dest;char*s&src[len-1];//指向最后一个字符while(len--!=0)*d=0;//尾部要加free(dest);//return}2:{charstr[]="o,world";intlen=strlen(str);chart;for(inti=0;i{}return0;}1.-1,2,7,28,,12628126中间那个数是什么?为什么?4^3-1=63n^3-1(n0,2,4)n^3+1(n1,3,5)2个栈为A,B,一开始均为空.入队push入栈出队B如果不为空,则将栈ApoppushBpop这样实现的队列入队和出队的平摊复杂度都还是O(1),比上面的几种方法要好。3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?函数名:把字符串转换成长整型数用法:longatol(constchar*nptr);int{longchar*str= l=printf("string=%sinteger=%ld\n",str,l);}对于一个频繁使用的短小函数,C语言中应用什么实现,C++中应用什么实现?c用宏定义,c++inline直接两个信令点的一组链路称作什么?PPP点到点连接voip都用了那些协议enum{x=0x801005,0x8010f4unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;p1+5=;p2+5=三.选择题Ethternet到Internet用到以下那个协议?unsignedshorthash(unsignedshort{return}四.找错题inta[60][250][1000],i,j,k;#defineMax_CBvoidLmiQueryCSmd(StructMSgCB*{unsignedchar{ }#defineSQUARE(a)((a)*(a))inta=5;intb;typedefunsignedcharintexamply_fun(BYTEgt_len;BYTE{BYTEgt_buf=(BYTE{return}}五.问答题IPPhone的原理是什么?TCP/IP通信建立的过程怎样,端口有什么作用?4.列举5种以上的新业务人工测试:个人复查、和会审HeapstackHeap是堆,stackStack空间有限,Heap是很大的自由介绍.Net和.Net客户端如何.Net组件实现WebService?10IA32中一共有多少种办法从用户态跳到内核态?ndndow,斥,写志到文或,共享存。.12ab键盘钩子endowHookExSQL快很多16.谈谈WindowsDNASMP机器上运行,而进程则可以跨机器迁移。#defineswap(x,y)\x=x+y;\y=x-y;\x=x-y;o(N)函数原型:intdo_dup(inta[],int3x2inti=cout<<boolalpha<<((i&(i-1))?false:true)<<4.unsignedintintvert(unsignedintx,intp,intn)x的进行转换,p为起始转化位,n为需要转换的长度,假设起始点在右边.如x=0b00010001,p=4,n=3转换后x=0b01100001unsignedintintvert(unsignedintx,intp,intn){unsignedint_t=0;unsignedint_a=1;for(inti=0;i<n;++i){_t|=_a=_a<<}_t=_t<<p;x^=_t;returnx;}char*constp;charconst*pconstchar*pchar*constp;常量指针,pcharconst*p;//指向常量的指针,指向的常量值不可以改constchar*p;//charconst*pcharstr1[]="abc";charstr2[]=constcharstr3[]="abc";constcharstr4[]=constchar*str5="abc";constchar*str6=char*str7="abc";char*str8=cout<<(str1==str2)<<endl;cout<<(str3==str4)<<endl;cout<<(str5==str6)<<endl;cout<<(str7==str8)<<结果是:001解答:str1,str2,str3,str4是数组变量,它们有各自的内存空间;str5,str6,str7,str8是指针,它们指向相同的常量区域。12.sizeof用法有问题吗?[C易voidUpperCasecharstr[])//str{for(size_ti=0;if('a'<=str[i]&&str[i]<='z'str[i]-=('a'-'A'}charstr[]=cout"str字符长度为sizeof(str)/sizeof(str[0endl;UpperCase(str);cout<<str<<sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态44。指针是多少位只要看地址总线的位数就行了。8038632的数据总线。所以指针的位数4个字节了。{intint*ptr=(int}*(a+1)就是a[1],*(ptr-1)a[4],&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(5int)int*ptr=(int*)(&a+1);&aint1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同a5intptrprt与(&a+1)类型是不一样的(这点很重要)prt-1sizeof(int*)a,&a的地址是一样的,但意思不一样,aa[0]的地址,&a是对象(数组)首地址,a+1a[1],&a+1是下一个对象的地址,即a[5].intmain(){charchar*str=&a; return}在读写而导致程序。char*s="AAA";"AAA"是字符串常量。s是指针,指向这个字符串常量,所以s的时候就有问题cosntchar*((while(1){}或者3static的作用是什么?4、关键字const有什么含意?5volatile有什么含意?并举出三个不同的例子?int*s[10])(int)int*s[10])(int)intfunc(intparam)inta=248;b=4;intconstc=21;constint*d=&a;int*conste=&b;intconst*fconst=&a;*c*d说了是const,e&aconstconst*fconst=&a;交换两个变量的值,不使用第三个变量。即a=3,b=5,交换之后有两种解法,一种用算术算法,一种用^(异或a=a+b=a-a=a-b;aa^b;//b=a^b;a=a^b;a^=b^=c和c++structcc++structcstructc++struct可以。c++class的主要区别在于默认的存取权限不同,structpublic,而classprivatevoidgetmemory(char{p=(char*)malloc(100); o}intmain({char*str=NULL;return}程序,getmemory中的malloc不能返回动态内存,free()对str操作charszstr[10]; 长度不一样,会造成的共享系统415.virtualvoidf()=0; 12.ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?tcp/udp属于TCPUDPIPUDP比较简单,UDP头包含很少的字节,比TCP负载消耗少。tcp:udp:1:(void*)ptr(*(void**))ptrptr.(void*)ptr(*(void**))ptr2:int{intx=3;return1;}mian中,c00(unsignedint*)0x100000=*((void(*)())0x100000)(0x100000强制转换成函数指针,即:(void(*)())0x100000*((voidtypedef可以看得更直观些typedefvoid(*)()2table,用一个宏定义,求出数据的元素个数#defineNTBL#defineNTBL面试题:线程与进程的区别和联系?线程是否具有相同的堆栈dll是否有独立的堆栈DLLDLLDLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?unsignedshortA=10;printf("~A=%u\n",~A);charc=128;第一题,~A=0xfffffff5,int11uint-128这两道题都是在二进制向int或uint转换时的最处理voidGetMemory(char**p,int{*p=(char}int{char*str=NULL; {}printf("\nstris%s",str);}strisworld。freestr指向的内存空间,它本身的值还是存在的.freestr=NULL.此时str指向空间的内存已被回收,如果输出语句之前还存在分配空间的操作的话,这段空间是可能尽管这段程序确实是存在大大的问题(上面各位已经说得很清楚了world来。当你ac((内存的时候,管理库通常都不会将内存还给操作系统,因此你是可以继续这块地址的,只不过楼上都了,好别这干。chara[10],strlen(a)15?运行的结果#include"stdio.h"#includevoid{charaa[10];}char(*str)[20];/*str是一个数组指针,即指向数组的指针.*/longa=0x801010;0x801010用二进制表示为“100000000001000000010000,十进制的值为 ,再加上5就是{chart:4;charunsignedshorti:8;unsignedlongm;};sizeof(A){chart:4;4chark:4;4unsignedshorti:8;8unsignedlongm;//24};//8intadd_n(intn){staticinti=100;i+=n;return}//帮忙分析一下typedefstruct{intb1:5;intvoid{AAchar cout<<aa.b1<cout<<aa.b2}-16首先sizeof(AA)的大小为4,b1和b2分别占5bit和2bit.0,1,2,3的ASC码,即, 分别为:10000,01因为int是有正负之 所以:答案是-16和求函数返回值,输入x=9999;intfunc(x){intcountx=0;while(x){countxx=x&(x-}return}?999919×1024151212561151100010111inta,b,cC=a+b不可以改变数据类型,clongint,关键是如何处理溢出问题booladd(inta,intb,int*c){return(a>0&&b>0&&(*c<0&&b<0&&(*c>a||}struct{inta:3;intb:2;intc:3;int{bitchar*c=(char*)&s;cout<<s.a<<<<<inta=-1;return0;}41--0x9910011001a001b11cc为有符合数时c100,1为表示cc4;同理b=-1;c为有符合数时c100,c4,b有些信息在时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省空间,并使处理简便,C语言又struct{位域列表其中位域列表的形式为:类型说明符位:位域长度struct{inta:8;intb:2;intstruct{inta:8;intb:2;intdatabs变量,共占两个字节。其中位域a8b2c6位。对于位域的struct{unsigneda:4unsigned0*空域*/unsignedb:4*从下一单元开始存放*/unsignedc:4}4由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说过8位二struct{intint2*2位不能使用*/intb:3int二、位域的使用位域的使用和结构成员的使用相同,其一般形式为:位域变量名?位位域允许用struct{unsigneda:1;unsignedb:3;unsigned}bit,*pbit;intmain(void)intintarr[100];p=&arr;return}int**p;//二级指针intmain(void){int**p,*q;intarr[100];q=arr;p=&q;return}#defineMAX255intmain(){unsignedcharA[MAX],i;//iunsignedcharfor(i=0;i<=MAX;i++)}A的下标范围为:0..MAX-1,这是其一..其二.i255时,循环内执行:这句本身没有问题..但是返回fori=0;i<=MAX;i++)语句时unsignedchar的取值范围在(0..255),i++i0了..无限循环下去structname1{charstr;shortx;intnum;}structname2{charstr;intnum;shortx;}在第二个结构中,为保证num按节对齐,char后必须留出3字节的空间;同时为保证整个结构的自然对齐(4字节对齐x212字节。A.cB.ccstatic变量,编译的时候会不会有问题?static变量static的全局变量,表明这个变量仅在本模块中有意义,不会影响其他模块。struct{inti:intj:inta:3;doubleb;struct{inti:intj:4;doubleb;int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论