嵌入式學(xué)習(xí)復(fù)習(xí)-50個(gè)c、面試題_第1頁(yè)
嵌入式學(xué)習(xí)復(fù)習(xí)-50個(gè)c、面試題_第2頁(yè)
嵌入式學(xué)習(xí)復(fù)習(xí)-50個(gè)c、面試題_第3頁(yè)
嵌入式學(xué)習(xí)復(fù)習(xí)-50個(gè)c、面試題_第4頁(yè)
嵌入式學(xué)習(xí)復(fù)習(xí)-50個(gè)c、面試題_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

面試題1:變量的和定義有什么區(qū)為變量分配地址和空間的稱為定義,不分配地址的稱為。一個(gè)變量可以在多個(gè)地方,但是只在一個(gè)地方定義。加入extern修飾的是變量的,說明此變量將在文件以外或在文件后面部分定義。說明:很多時(shí)候一個(gè)變量,只是不分配內(nèi)存空間,直到具體使用時(shí)才初始化,分配內(nèi)存空間,如外部變量。面試題2bool、int、float、指針變量與“零值”比較的if語(yǔ)bool型數(shù)據(jù)if(if(flag{}{}intif(if(0!=flag{}{}指針型數(shù):if(NULLif(NULL==flag{}{}ifif((flag>=NORM)&&(flag<=NORM){ 面試題3:sizeof和strlensizeofstrlen有以下區(qū)sizeof是一個(gè)操作符,strlen是庫(kù)函數(shù)sizeof的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而strlen只能以結(jié)尾為‘\0‘編譯器在編譯時(shí)就計(jì)算出了sizeof的結(jié)果。而strlen函數(shù)必須在運(yùn)行時(shí)才能計(jì)算出來(lái)。并且計(jì)算的是數(shù)據(jù)類型占內(nèi)存的大小,而strlen計(jì)算的是字符串實(shí)際的數(shù)組做sizeof的參數(shù)不,傳遞給strlen就為指針了注意:有些是操作符看起來(lái)像是函數(shù),而有些函數(shù)名看起來(lái)又像操作符,這類容易的名稱一定要加以區(qū)分,否則遇到數(shù)組名這類特殊數(shù)據(jù)類型作參數(shù)時(shí)就很容易出錯(cuò)。最容易為函數(shù)的操作符就是izef。面試題4:C語(yǔ)言的關(guān)鍵字staticC++的關(guān)static有什么區(qū)Cstatic用來(lái)修飾局部靜態(tài)變量和外部靜態(tài)變量、函數(shù)。而C++中除了上述功能外,還用來(lái)定注意:編程時(shí)static的性,和全局性的特點(diǎn)可以讓在不同時(shí)期調(diào)用的函數(shù)進(jìn)行通信,傳遞信息,C++的靜態(tài)成員則可以在多個(gè)對(duì)象實(shí)例間進(jìn)行通信,傳遞信息面試題5:C中的malloc和C++中的new有什么mallocnew有以下不同new、 是操作符,可以重載,只能在C++中使用malloc、是函數(shù),可以覆蓋,C、C++中都可以使用 可以調(diào)用對(duì)象的構(gòu)造函數(shù),對(duì)應(yīng)的delete調(diào)用相應(yīng)的析構(gòu)函數(shù)malloc僅僅分配內(nèi)存,僅僅回收內(nèi)存,并不執(zhí)行構(gòu)造和析構(gòu)函new、delete返回的是某種數(shù)據(jù)類型指針,malloc、返回的是void指針注意:malloc申請(qǐng)的內(nèi)存空間要用釋放,而new申請(qǐng)的內(nèi)存空間要用delete釋放,不要混用。因面試題6:寫一個(gè)“標(biāo)準(zhǔn)”宏#define 注意:在調(diào)用時(shí)一定要注意這個(gè)宏定義的副作用,如 p指針就自加了兩次,違背了MIN的本面試題7:一個(gè)指針可以是volatile個(gè)指向一個(gè)buffer的指針時(shí),必須volatile來(lái)修飾這個(gè)指針。說明:指針是一種普通的變量,從上沒有什么不同于其他變量的特性。其保存的數(shù)值是個(gè)整型據(jù),和整型變量不同的是,這個(gè)整型數(shù)據(jù)指向的是一段內(nèi)存地址。面試題8:a和&a有什么區(qū)voidmain(void){intint*ptr=(int}請(qǐng)寫出以下代碼的打印結(jié)果,主要目voidmain(void){intint*ptr=(int}輸出結(jié)果:2,5注意:數(shù)組名a可以作數(shù)組的首地址,而&a是數(shù)組的指針。思考,將原式的int*ptr=(int改為int*ptr=(int*)(a+1);時(shí)輸出結(jié)果將是什么呢?面試題9:簡(jiǎn)述C、C++程序編譯的內(nèi)存C、C++中內(nèi)存分配方式可以分從靜態(tài)區(qū)域分配內(nèi)存在程序編譯時(shí)就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。速度快、不容易出錯(cuò),因?yàn)橛邢到y(tǒng)會(huì)善后。例如全局變量,tatic變量等。即動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意大小的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由程序員決定,使用非常靈活。如果在堆上分配了空間,就有一個(gè)C、C++程序編譯時(shí)內(nèi)存分 大區(qū):堆區(qū)、棧區(qū)、全局區(qū)、文字常量區(qū)、程序代碼區(qū)面試題10:簡(jiǎn)述strcpy、sprintf與memcpy三者主要有以操作對(duì)象不同,strcpy的兩個(gè)操作對(duì)象均為字符串,sprintf的操作源對(duì)象可以是多種數(shù)據(jù)類型,目的操作對(duì)象是字符串,memcpy的兩個(gè)對(duì)象就是兩個(gè)任意可操作的內(nèi)存地址,并不限于何種數(shù)據(jù)類型。執(zhí)行效率不同,memcpy最高,strcpy次之,sprintf的效率最低。實(shí)現(xiàn)功能不同,strcpy主要實(shí)現(xiàn)字符串變量間的拷貝,sprintf主要實(shí)現(xiàn)其他數(shù)據(jù)類型格式到字符串的轉(zhuǎn)化,memcpy主要是內(nèi)存塊間的拷貝。說明:strcpy、sprintfmemcpy都可以實(shí)現(xiàn)拷貝的功能,但是針對(duì)的對(duì)象不同,根據(jù)實(shí)際需求,來(lái)面試題11:設(shè)址為0x67a9的整型變量的值為intintptr=(int*ptr=面試題12:面向?qū)ο蟮娜筇孛嫦驅(qū)ο蟮娜筇卣魇欠庋b性、繼承性和多態(tài)性protection(privateprotected,多態(tài)性:是將父類對(duì)象設(shè)置成為和一個(gè)或它的子對(duì)象相等的技術(shù)。用子類對(duì)象給父類對(duì)象賦值之后,父類對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。員應(yīng)該多看、多練。面試題13:C++的空類有哪些成員類的默認(rèn)函數(shù)。另外需要注意的是,只有當(dāng)實(shí)際使用這些函數(shù)的時(shí)候,編譯器才會(huì)去定義它們。面試 14:談?wù)勀銓?duì)拷貝構(gòu)造函數(shù)和賦值運(yùn)算符的認(rèn)拷貝構(gòu)造函數(shù)和賦值運(yùn)算符重載有以下兩個(gè)不拷貝構(gòu)造函數(shù)生成新的類對(duì)象,而賦值運(yùn)算符不能由于拷貝構(gòu)造函數(shù)是直接構(gòu)造一個(gè)新的類對(duì)象,所以在初始化這個(gè)對(duì)象之前不用檢驗(yàn)源對(duì)象是否和新建對(duì)象相同。而賦值運(yùn)算符則需要這個(gè)操作,另外賦值運(yùn)算中如果原來(lái)的對(duì)象中有內(nèi)存分配要先把內(nèi)存釋放掉的面試題15:用C++設(shè)計(jì)一個(gè)不能被繼承的類 te<typenameT>class{friendT;A()~A()classB:virtualpublic{B()~B()classC:virtualpublic{C()~C()voidmain(void{B//Cc;}面試題16:基類的私有虛函寫出以下程序classA{{virtualvoid{cout<<"A::g"<<}virtualvoid{cout<<"A::f"<<}classB:public{void{cout<<"B::g"<<}virtualvoid{cout<<"B::h"<<}typedefvoid(*Fun)(void);voidmain(){BFunfor(inti=0;i<3;{pFun=(Fun)*((int*)*(int*)(&b)+i);}}輸出 面試 17:簡(jiǎn)述類成員函數(shù)的重寫、重載和隱藏的區(qū)virtual的區(qū)別:重寫的基類中被重寫的函數(shù)必須要有virtualvirtual修飾,也可參數(shù)的區(qū)別:隱藏函數(shù)和被隱藏的函數(shù)的參數(shù)列表可以相同,也可不同,但是函數(shù)名肯定要相同。當(dāng)參數(shù)不相同時(shí),無(wú)論基類中的參數(shù)是否被virtual修飾,基類的函數(shù)都是被隱藏,而不是被重寫。說明:雖然重載和覆蓋都是實(shí)現(xiàn)多態(tài)的基礎(chǔ),但是兩者實(shí)現(xiàn)的技術(shù)完全不相同,達(dá)到的目的也是完全不同的,覆蓋是動(dòng)態(tài)態(tài)綁定的多態(tài),而重載是靜態(tài)綁定的多態(tài)。面試題18:簡(jiǎn)述多態(tài)實(shí)現(xiàn)的原vtable。虛函數(shù)表的各表項(xiàng)為指向?qū)?yīng)虛函數(shù)的指針。編譯器還會(huì)在此類中隱含插入一個(gè)指針vptr(對(duì)vc編譯器來(lái)說,它插在類的第一個(gè)位置上)指向虛函數(shù)表。調(diào)用此類的構(gòu)造函數(shù)時(shí),在類的構(gòu)造函數(shù)中,編譯器會(huì)隱含執(zhí)行vptr與vtable的關(guān)聯(lián)代碼vptr指向?qū)?yīng)vtable,將類與此類的vtable聯(lián)系了起來(lái)。另外在調(diào)用類的構(gòu)造函數(shù)時(shí),指向基礎(chǔ)類的指針此時(shí)已經(jīng)變成指向具this指針,這樣依靠此this指針即可得到正確的vtable如此才能注意:一定要區(qū)分虛函數(shù),純虛函數(shù)、虛擬繼承的關(guān)系和區(qū)別。牢記虛函數(shù)實(shí)現(xiàn)原理C++面試的重要考點(diǎn)之一,而虛函數(shù)是實(shí)現(xiàn)多態(tài)的基礎(chǔ)。面試題19:鏈表和數(shù)組有什么數(shù)組和鏈表有以下幾點(diǎn)不(1)形式:數(shù)組是一塊連續(xù)的空間,時(shí)就要確定長(zhǎng)度。鏈表是一塊可不連續(xù)的動(dòng)態(tài)空間,長(zhǎng)數(shù)據(jù)查找:數(shù)組的線性查找速度快,查找操作直接使用偏移地址。鏈表需要按順序檢索結(jié)點(diǎn),效率低。越界問題:鏈表不存在越界問題,數(shù)組有越界問題刪除。數(shù)組節(jié)省空間但是長(zhǎng)度固定,鏈表雖然變長(zhǎng)但是占了的空間。面試題20:怎樣把一個(gè)單鏈表ListList{{return}listcur listpre listpre.nextpre.next=while(NULL!=cur.next{tmp=tmp.next=prepre=tmp;cur=}return}ListList*reverse(List*oldList,List*newHead=NULL{List*nextoldList oldList->next=newHead; newHead=oldList; return(next==NULL)?newHead:reverse(t,newHead}說明:循環(huán)算法就是圖10.2—圖10.5的移動(dòng)過程,比較好理解和想到。遞歸算法的設(shè)計(jì)雖有一點(diǎn)難面試題21:簡(jiǎn)述隊(duì)列和棧的異隊(duì)列和棧都是線性結(jié)構(gòu),但是兩者的插入和刪除數(shù)據(jù)的操作不同,隊(duì)列是“先進(jìn)先出”,棧是注意:區(qū)別棧區(qū)和堆區(qū)。堆區(qū)的存取是“順序隨意”,而棧區(qū)是“后進(jìn)先出”。棧由編譯器自動(dòng)分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。堆一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由S回收。分配方式類似于鏈表。它與本題中的堆和棧是兩回事堆棧只是一種數(shù)據(jù)結(jié)構(gòu),而堆區(qū)和棧區(qū)是程序的不同內(nèi)存區(qū)域面試題22:能否用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列結(jié)點(diǎn)結(jié)typedeftypedefstruct{intdata;創(chuàng)建空棧:{S=(LinkStack)malloc(sizeof(node));if(NULL==S){printf("Failtomallocanewreturnreturn}S->data=S->next=return}棧的插LinkStackLinkStackPush(LinkStack&S,int{if(NULL=={return}LinkStackp=p=(LinkStack)malloc(sizeof(node)if(NULL=={printf("Failtomallocanewnode.\n");returnS;}if(NULL==S-{p->next=}{p->next=S-}p->data=S->next return}出棧函數(shù):nodenodePop(LinkStack{nodetemp;temp.data=0;if(NULL=={printf("Therenonodeinstack!");returntemp;}temp=if(if(S->next==NULL{printf("ThestackisNULL,can'tpop!\n");returntemp;}LinkStackp=S-temp=(p);return}雙棧實(shí)現(xiàn)隊(duì)列LinkStackLinkStackStackToQueuPush(LinkStack&S,int{nodeLinkStackS1= while(NULL!=S->next{n=Pop(S}Push(S1,datawhile(NULL!=S1->next{n=Pop(S1);}return}說明:用兩個(gè)棧能夠?qū)崿F(xiàn)一個(gè)隊(duì)列的功能,那用兩個(gè)隊(duì)列能否實(shí)現(xiàn)一個(gè)隊(duì)列的功能呢?結(jié)果是否定的,因?yàn)闂J窍冗M(jìn)后出,將兩個(gè)棧連在一起,就是先進(jìn)先出。而隊(duì)列是現(xiàn)先進(jìn)先出,無(wú)論多少個(gè)連在一起都是先進(jìn)先出,而無(wú)法實(shí)現(xiàn)先進(jìn)后出。面試題23:計(jì)算一顆二叉深度的計(jì)算函數(shù):intintdepth(BiTree{if(!T)returnintintd1=depth(T-return}注意:根據(jù)二叉樹的結(jié)構(gòu)特點(diǎn),很多算法都可以用遞歸算法來(lái)實(shí)現(xiàn)。面試題24:編碼實(shí)現(xiàn)直接插入直接插入排序編程實(shí)現(xiàn)如voidmain(void){intARRAY[10]={0,6,3,2,7,5,4,9,1,8intfor(i=0;i<10;{}for(i=2;i<=10;i++{if(ARRAY[i]<ARRAY[i-{ARRAY[0]=j=i-1;ARRAY[j+1]=ARRAY[j];j--;}while(ARRAY[0]<ARRAY[j]}}for(i=0;i<10;{}}注意:所有為簡(jiǎn)化邊界條件而引入的附加結(jié)點(diǎn)(元素)均可稱為哨兵。引入哨兵后使得查找循環(huán)條件的時(shí)間大約減少了一半,對(duì)于記錄數(shù)較大的文件節(jié)約的時(shí)間就相當(dāng)可觀。類似于排序這樣使用頻率非常高的算法,要盡可能地減少其運(yùn)行時(shí)間。所以不能把上述算法中的哨兵視為雕蟲小技。面試題25:編碼實(shí)現(xiàn)冒泡冒泡排序編程#defineLEN10voidmain(void){intARRAY[10]={0,6,3,2,7,5,4,9,1,8printf("\n"for(inta=0;a<LEN;a++{printf("%d",ARRAY[a]}inti=intj=boolfor(i=1;i<LEN;i++{isChange=for(j=LEN-1;j>=i;j--{if(ARRAY[j+1]<ARRAY[j]{ARRAY[j+1]=ARRAY[j];ARRAY[j]=ARRAY[0];isChange=}}printf("\n"for(a=0;a<LEN;{printf("%d",ARRAY[a]}if(!isChange{}}printf("\n");}面試題26:編碼實(shí)現(xiàn)直接選擇#defineLEN9voidmain(void){intARRAY[LEN]={5,6,8,2,4,1,9,3,7printf("Beforefor(intm=0;m<LEN;m++{printf("%d",ARRAY[m]}for(inti=1;i<=LEN-1;{intt=i-1;for(intj=i;j<LEN;{if(ARRAY[j]<{t=}}if(t!=(i-{temp=ARRAY[i-1];ARRAY[i-1]=ARRAY[t];ARRAY[t]=}}printf("\n");for(i=0;i<LEN;i++{printf("%d",ARRAY[i]}printf("\n"}注意:在直接選擇排序中,具有相同關(guān)鍵碼的對(duì)象可能會(huì)顛倒次序,因而直接選擇排序算法是一種不穩(wěn)定的排序方法。在本例中只是例舉了簡(jiǎn)單的整形數(shù)組排序,肯定不會(huì)有什么問題。但是在復(fù)雜的數(shù)據(jù)元素序列組合中,只是根據(jù)單一的某一個(gè)關(guān)鍵值排序,直接選擇排序則不保證其穩(wěn)定性,這是直接選擇排序的一個(gè)弱點(diǎn)。面試題27:編程實(shí)堆排序編程實(shí)現(xiàn):#include voidcreateHeep(intARRAY[],intsPointint {while((2*sPoint+1)<Len{intmPoint=2*sPoint+1;if((2*sPoint+2)<Len{if(ARRAY[2*sPoint+1]<ARRAY[2*sPoint+2]{mPoint=}}if(ARRAYsPointARRAYmPoint {inttmpDataARRAYsPoint //sPoint與mPointARRAY[sPoint]=ARRAY[mPoint];ARRAY[mPoint]=tmpData;}{}}

sPoint=mPoint }voidheepSortintARRAYintLen {intforiLen21i0i //將Hr[0,Lenght-1]建成大根{createHeep(ARRAY,i,}for(i=Len-1;i>0;i--{inttmpData=ARRAY[0]; ARRAY[0]=ARRAY[i];ARRAY[i]=createHeepARRAY0i 將}}intmain(void{{intARRAY[]={5,4,7,3,9,1,6,8,for(inti=0;i<9;i++){printf("%d",}heepSort(ARRAY,9for(i=0;i<9;i++{printf("%d",ARRAY[i]}printf("\n");return0;}和大堆排序的實(shí)現(xiàn)過程相似,但是卻可以加深對(duì)堆排序的和理解。面試題28:編程實(shí)現(xiàn)基數(shù)#include<stdio.h>#include<stdio.h>#defineLEN8typedefstructnode{intstructnode*typedefstruct{QueueNode {Q=Q=(QueueLink)malloc(sizeof(Queue)if(NULL==Q{printf("Failtomallocnullqueue!\n");returnNULL;}Q->front=(QueueNode)malloc(sizeof(node));Q->rear=(QueueNode)malloc(sizeof(node));if(NULL==Q->front||NULL==Q->rear){printf("Failtomallocanewqueue'sforntorrear!\n");returnNULL;}Q->rear=return}intlenDatanodedataint {intm=0;inttemp=0;intd;for(inti=0;i<len;{while(d>0){d/=10;temp}if(temp>m{m=}temp=}return}QueueLinkPushQueueLink&Qnodenode {QueueNodep=(QueueNode)malloc(sizeof(node));if(NULL==p){printf("Failtomallocanewnode!\n");returnNULL;}p1=Q-while(p1->next!={p1=p1-}p->data=node.data;p1->next=p;p->next=Q-return}nodePopQueueLink {nodetemp;temp.data=0;QueueNodep;p=Q->front->next;if(p!=Q->rear){temp=(p);p=}return}intIsEmpty(QueueLink{{return}return}intmain(void{inti=intMax=0; intd=10;intpower=1;intk=0;nodeArray[LEN450NULL32,NULL781,NULL57NULL},QueueLinkQueue[10];for(i=0;i<10;i++){( }for(i=0;i<LEN;{printf("%d}Max=lenData(Array,LEN); for(intfor(intj=0;j<Max;{if(j==0)power=elsepower=powerfor(i=0;i<LEN;{k=Array[i].data/power-(Array[i].data/(power*d))*d;Push(Queue[k],Array[i]);}for(intl0k0ld; {while(IsEmpty(Queue[l]){Array[k++]=Pop(Queue[l]}}for(intt=0;t<LEN;{printf("%d}}return}的面試題29:談?wù)勀銓?duì)編程規(guī)范的理解或認(rèn)識(shí)編程規(guī)范可總結(jié)為:程序的可行性,可讀性、可移植性以及可說明:這是編程規(guī)范的總綱目,面試者不一定要去背誦上面給出的那幾個(gè)例子,應(yīng)該去理解這幾個(gè)例子說明的問題,想,自己如何解決可行性、可讀性、可移植性以及可測(cè)試性這幾個(gè)問題,結(jié)合以上幾個(gè)例子和自己平時(shí)的編程習(xí)慣來(lái)回答這個(gè)問題。面試題30:shorti0;ii1L;這兩句有錯(cuò)代碼一是錯(cuò)的,代碼二是說明:在數(shù)據(jù)安全的情況下大類型的數(shù)據(jù)向小類型的數(shù)據(jù)轉(zhuǎn)換一定要顯示的強(qiáng)制類型轉(zhuǎn)換。面試題31:&&和&、||和|有什么區(qū)&和|對(duì)操作數(shù)進(jìn)行求值運(yùn)算,&&和||&&和||注意:在編程的時(shí)候有些時(shí)候?qū)?&或|替換成&或|沒有出錯(cuò),但是其邏輯是錯(cuò)誤的,可能會(huì)導(dǎo)致不可預(yù)想的(比如當(dāng)兩個(gè)操作數(shù)一個(gè)是1另一個(gè)是2時(shí))。面試題32:C++的和C語(yǔ)言的指針有什么區(qū)指針和主要有以下區(qū)別(1)必須被初始化,但是不分配空間。指針不時(shí)初始化,在初始化的時(shí)候需要分配(2)初始化以后不能被改變,指針可以改變所指的對(duì)象不存在指向空值的,但是存在指向空值的指針注意:作為函數(shù)參數(shù)時(shí),會(huì)一定的問題,因?yàn)樽屪鲄?shù),目的就是想改變這個(gè)所指向地址的內(nèi)容,而函數(shù)調(diào)用時(shí)傳入的是實(shí)參,看不出函數(shù)的參數(shù)是正常變量,還是,因此可能會(huì)錯(cuò)誤。所以使用時(shí)一定要謹(jǐn)慎。面試題33:在二元樹中找出和為某一值的所有輸入一個(gè)整數(shù)和一棵二元樹。從樹的根結(jié)點(diǎn)開始往下,一直到葉結(jié)點(diǎn)所經(jīng)過的所有結(jié)點(diǎn)形成一條路徑。打印出和與輸入整數(shù)相等的所有路徑。例如,輸入整數(shù)9和如下二元樹:3 則打印出兩條路徑:3,6和3,2,4【答typedeftypedefstruct{BiTNode*tree;voidinitpath(pPath*voidinitpath(pPath*L{*L=(pPath)malloc(sizeof(PATH));(*L)->next=NULL;}樹結(jié)點(diǎn)入棧函數(shù):voidvoidpushpath(pPathH,pBTree{pPathp=H->next;pPathq=H;while(NULL!=p{{q=p=p-}p=(pPath)malloc(sizeof(PATH));p->next=NULL;p->tree=q->next=}樹結(jié)點(diǎn)打印函數(shù):voidvoidprintpath(pPathL{pPathp=L-while(NULL!=p{p=p-}}樹結(jié)點(diǎn)出棧函數(shù):voidvoidpop_path(pPathH{pPathq=if(NULL==p{}p=p->next;while(NULL!=p){q=q->next;p=p-}(q->nextq->next=}intIsLeaf(pBTree{returnintIsLeaf(pBTree{return(T->lchild==NULL)&&(T->rchild==NULL}查找符合條件的路徑intintfind_path(pBTreeT,intsum,pPath{{pushpath(L,if((record==sum)&&(IsLeaf(T)){printpath(Lprintf("\n"}if(T->lchild!=NULL{findpath(T->lchild,sum,}if(T->rchild!=NULL{findpath(T->rchild,sum,}poppath(L);return0;}面試題34:寫一個(gè)“標(biāo)準(zhǔn)”宏寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并且返回較小的一個(gè)【答#define 注意:在調(diào)用時(shí)一定要注意這個(gè)宏定義的副作用,如 p指針就自加了兩次,違背了MIN的本面試題35:typedef和define有什么用法不同:typedef用來(lái)定義一種數(shù)據(jù)類型的別名,增強(qiáng)程序的可讀性。define主要用來(lái)定義執(zhí)行時(shí)間不同:typedef是編譯過程的一部分,有類型檢查的功能。define是宏定義,是預(yù)編作用域不同:typedef有作用域限定。define不受作用域約束,只要是在define后的對(duì)指針的操作不同:typedef和define注意:typedef定義是語(yǔ)句,因?yàn)榫湮惨由戏痔?hào)。而define不是語(yǔ)句,千萬(wàn)不能在句尾加分號(hào)面試題36:關(guān)鍵字constconst用來(lái)定義一個(gè)只讀的變量或?qū)ο?。主要?yōu)點(diǎn):便于類型檢查、定義一樣可以方便地進(jìn)行說明:const修飾函數(shù)參數(shù),是一種編程規(guī)范的要求,便于閱讀,一看即知這個(gè)參數(shù)不能被改變,面試題37:static有什么static0,普通變量的默認(rèn)值面試題38:extern有什么exern標(biāo)識(shí)的變量或者函數(shù)其定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其它模塊中尋找其定義。面試題39:流操作符重載為什么返注意:除了在賦值操作符和流操作符之外的其他的一些操作符中,如+、-、*、/等卻千萬(wàn)不能返回面試題40:簡(jiǎn)述指針常量與常量指針指針常量是指定義了一個(gè)指針,這個(gè)指針的值只能在定義時(shí)初始化,其他地方不能改變。常量指針是指針常量強(qiáng)調(diào)的是指針的不可改變性,而常量指針強(qiáng)調(diào)的是指針對(duì)其所指對(duì)象的不可改變性。數(shù)中的不可改變特性。面試題41:數(shù)組名和指針的區(qū)請(qǐng)寫出以下代碼的打印結(jié)#include<string.h>voidmain(void){char ocharchar o}4做參數(shù)傳遞給函數(shù)后,其失去原來(lái)的含義,變作普通的指針。另外要注意sizeof不是函數(shù),只是操作符。面試題42:如何避免“野指針“野指針”產(chǎn)生原因及解決辦法指針變量時(shí)沒有被初始化。解決辦法:指針時(shí)初始化,可以是具體的地址值,也可讓它指向NULL。指針p被或者delete之后,沒有置為NULL。解決辦法:指針指向的內(nèi)存空間被釋放后指針應(yīng)該指向NULL。指針操作了變量的作用范圍。解決辦法:在變量的作用域結(jié)束前釋放掉變量的地址空間并且讓指針指向NULL。面試題43:常有什么作常的引入主要是為了避免使用變量的時(shí),在不知情的情況下改變變量的值。常主要用于定義一個(gè)普通變量的只讀屬性的別名、作為函數(shù)的傳入形參,避免實(shí)參在調(diào)用函數(shù)中被意外的改變。面試題44:編碼實(shí)現(xiàn)字符串轉(zhuǎn)化為編碼實(shí)現(xiàn)函數(shù)atoi(),設(shè)計(jì)一個(gè)程序,把一個(gè)字符串轉(zhuǎn)化為一個(gè)整型數(shù)值。例如數(shù)字:“ 【答intintmyAtoi(constchar*{intintnum=intn=0;char*p=str;if(p=={return-}while(*p++!={}p={isNegative=}chartemp=for(inti=0;i<n;{chartemp=*p++;if(temp>'9'||temp<'0'){}if(num!=0||temp!={temp-=num+=temp*int(pow(10,n-1-i)}}{return(0-}{return}}注意:此段代碼只是實(shí)現(xiàn)了十進(jìn)制字符串到

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論