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()的區(qū)別?malloc(size_tsize);calloc(size_tn,size_tmallocsize大小的內存塊,而callocn*size"\n" 包含預定義頭文件< 和""的區(qū)別答案:只在指定的里尋找被包含文件;先在當前下查找,再在指定下查找;通常<>方式用于系統(tǒng)的頭文件,而一般用戶的頭文件用""的方式。 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后面空了幾個字節(jié)接著是網友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字節(jié))中較小的一個對齊.S1中,a11字節(jié)對齊,8,1,a1字節(jié)對齊;4個字節(jié),4字節(jié)對齊,4字節(jié)對齊,sizeof(S1)S2中,cS1a一樣,1字節(jié)對齊,d是個結構,8個字節(jié),它按什么對齊呢?對于結構來說,它的默認對齊方式就是它的所有成員使用的對齊參數中最大的一個,S14.所以,d就是按4字節(jié)對齊.e8個字節(jié),8字節(jié)對齊,和指定的一樣,8字節(jié)的邊界上,這時12個字節(jié)了,4個字節(jié)的空,16e.這時,24,8(e8字節(jié)對齊)整除.這樣,24個字節(jié).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.與指針有什么區(qū)別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全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函全局變量(外部變量)的說明之前再冠以static就構成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)方從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數;static2、程序的局部變量存在于(堆棧)中,全局變量存在于()中,動態(tài)申請數據存在于()typedefunion{longi;intk[5];charc;}DATE;structdata{intcat;DATEcow;doubledog;}too;DATEmax; 答:DATEunion,變量公用空間.int[5],20個字節(jié).所以它的大小20datastruct,每個變量分開占用空間.int4DATE20double820+32當然...16位編輯器下int2字節(jié),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這樣實現(xiàn)的隊列入隊和出隊的平攤復雜度都還是O(1),比上面的幾種方法要好。3.在c語言庫函數中將一個字符轉換成整型的函數是atool()嗎,這個函數的原型是什么?函數名:把字符串轉換成長整型數用法:longatol(constchar*nptr);int{longchar*str= l=printf("string=%sinteger=%ld\n",str,l);}對于一個頻繁使用的短小函數,C語言中應用什么實現(xiàn),C++中應用什么實現(xiàn)?c用宏定義,c++inline直接兩個信令點的一組鏈路稱作什么?PPP點到點連接voip都用了那些協(xié)議enum{x=0x801005,0x8010f4unsignedchar*p1;unsignedlong*p2;p1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;p1+5=;p2+5=三.選擇題Ethternet到Internet用到以下那個協(xié)議?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種以上的新業(yè)務人工測試:個人復查、和會審HeapstackHeap是堆,stackStack空間有限,Heap是很大的自由介紹.Net和.Net客戶端如何.Net組件實現(xiàn)WebService?10IA32中一共有多少種辦法從用戶態(tài)跳到內核態(tài)?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是指針,它們指向相同的常量區(qū)域。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如用于數組,只能測出靜態(tài)數組的大小,無法檢測動態(tài)44。指針是多少位只要看地址總線的位數就行了。8038632的數據總線。所以指針的位數4個字節(jié)了。{intint*ptr=(int}*(a+1)就是a[1],*(ptr-1)a[4],&a+1不是首地址+1,系統(tǒng)會認為加一個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的主要區(qū)別在于默認的存取權限不同,structpublic,而classprivatevoidgetmemory(char{p=(char*)malloc(100); o}intmain({char*str=NULL;return}程序,getmemory中的malloc不能返回動態(tài)內存,free()對str操作charszstr[10]; 長度不一樣,會造成的共享系統(tǒng)415.virtualvoidf()=0; 12.ISO的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優(yōu)缺點?tcp/udp屬于TCPUDPIPUDP比較簡單,UDP頭包含很少的字節(jié),比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面試題:線程與進程的區(qū)別和聯(lián)系?線程是否具有相同的堆棧dll是否有獨立的堆棧DLLDLLDLL自己創(chuàng)建的線程所執(zhí)行,那么是不是說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((內存的時候,管理庫通常都不會將內存還給操作系統(tǒng),因此你是可以繼續(xù)這塊地址的,只不過樓上都了,好別這干。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有些信息在時,并不需要占用一個完整的字節(jié),而只需占幾個或一個二進制位。例如在存放一個開關量時,只有0和1兩種狀態(tài),用一位二進位即可。為了節(jié)省空間,并使處理簡便,C語言又struct{位域列表其中位域列表的形式為:類型說明符位:位域長度struct{inta:8;intb:2;intstruct{inta:8;intb:2;intdatabs變量,共占兩個字節(jié)。其中位域a8b2c6位。對于位域的struct{unsigneda:4unsigned0*空域*/unsignedb:4*從下一單元開始存放*/unsignedc:4}4由于位域不允許跨兩個字節(jié),因此位域的長度不能大于一個字節(jié)的長度,也就是說過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時,循環(huán)內執(zhí)行:這句本身沒有問題..但是返回fori=0;i<=MAX;i++)語句時unsignedchar的取值范圍在(0..255),i++i0了..無限循環(huán)下去structname1{charstr;shortx;intnum;}structname2{charstr;intnum;shortx;}在第二個結構中,為保證num按節(jié)對齊,char后必須留出3字節(jié)的空間;同時為保證整個結構的自然對齊(4字節(jié)對齊x212字節(jié)。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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論