2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)_第1頁(yè)
2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)_第2頁(yè)
2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)_第3頁(yè)
2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)_第4頁(yè)
2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2022年度C語(yǔ)言面試題庫(kù)匯編(含完整答案)CPUBSSDSC中有四種可typeNewTypeName;示例:typedefunsignedintUnsignedlnt;現(xiàn)在Unsi6、以下C代碼的輸出是什么?##include<stdio.h>intmain(){{typedefautointmyAutoInt;myAutoIntdataprintf%d",data);return0;}C7、C語(yǔ)言中的變量是什么?8、使用變量p寫(xiě)出下一些聲明:9、C語(yǔ)言有哪些數(shù)據(jù)類型?nion、enum)在C語(yǔ)言中,不同的數(shù)據(jù)類型有不同的范圍。范圍因編譯器而異。在下表中,根據(jù)32位GCC編譯器列出了一些具有范圍和格式說(shuō)明符鍵字,那么只有內(nèi)部鏈接或無(wú)鏈接有效。1、靜態(tài)變量只初始化一次,因此在函帶有static關(guān)鍵字在C語(yǔ)言中,函數(shù)的鏈接是外部的,它可以被同一個(gè)或另一個(gè)翻譯單元訪C語(yǔ)言有3種鏈接,外部鏈接、內(nèi)部鏈接和無(wú)鏈接。13、C語(yǔ)言中整數(shù)的大小取決于什么?C標(biāo)準(zhǔn)解釋了整數(shù)的最小大小應(yīng)該是16位。一些編程語(yǔ)言解釋說(shuō)整數(shù)的大小層架構(gòu)愉t、uin32t..)代替標(biāo)準(zhǔn)int。在標(biāo)準(zhǔn)C語(yǔ)言中,整數(shù)數(shù)據(jù)類型默認(rèn)是有符號(hào)的。所以如果創(chuàng)建一個(gè)整數(shù)變15、C中的無(wú)符號(hào)整數(shù)和有符號(hào)整數(shù)有什么區(qū)別?有符號(hào)和無(wú)符號(hào)整數(shù)類型具有相同的存儲(chǔ)(根據(jù)標(biāo)準(zhǔn)至少16位)和對(duì)齊方式,如:假設(shè)整數(shù)的大小為2個(gè)字節(jié)。有符號(hào)整數(shù)-32768到+32767無(wú)符號(hào)整數(shù)0到65535在計(jì)算無(wú)符號(hào)整數(shù)時(shí),它永遠(yuǎn)不會(huì)溢出,因?yàn)槿绻?jì)算結(jié)果大17、以下C代碼的輸出是什么?##include<stdio.h>#definePRINT(var,data)do{\if(var<data)\printf("Aticleworld");\ileintmain(){{}C在嘗試增加Rvalue,所以將收到編譯器錯(cuò)誤。18、C語(yǔ)言中的枚舉是什么?用enum關(guān)鍵字,我們可以通過(guò)使用枚舉標(biāo)簽(可選)和命名整數(shù)列表來(lái)聲明枚const是什么?const限定符僅向編譯器指示無(wú)法更改限定對(duì)象的值。簡(jiǎn)單來(lái)說(shuō),coue!表20、什么時(shí)候應(yīng)該在C程序中使用const?某些地方,const比宏更好,因?yàn)閏onst由編譯器處理并且具有類型檢查。1.1.constinta;2.intconsta;3.constint*a;4.int*consta;5.intconst*aconst;Ca是一個(gè)常數(shù)整數(shù)。與第一個(gè)類似,a是一個(gè)常數(shù)整數(shù)。這里的a是一個(gè)指向常量整數(shù)的指針,整數(shù)的值是不可修改的,但指針是可修改的。這里的a是一個(gè)指向整數(shù)的常量指針,指向的整數(shù)的值是可修改的,但指針是不可修改的。t的值都是不可修改的。22、下面的C程序的輸出是什么?##include<stdio.h>intmain(){}floatdata=1.2;printf("%*f",pos,data);return0;C上述代碼的輸出將是1.200000,有6個(gè)空格。解釋:這里1.200000是用6個(gè)空格打印的,因?yàn)橥ㄟ^(guò)在print給出*可以指定一個(gè)額外的寬度參數(shù),這里pos是寬度,data是值。如果數(shù)字小于寬度,則其余部分用空格填23、常量指針和指向常量的指針有什么區(qū)別?常量指針:常量指針是其值(指向的地址)不可修改的指針。如果嘗試修改指針值,將得到編譯器錯(cuò)誤。常量指針聲明如下:DataType*constPointerN譯器錯(cuò)誤時(shí),讓我們看看下面的示例代碼。#include<stdio.h>intmain(void){intvar1=10,var2=20;//Initia當(dāng)在操作數(shù)上使用后自增(++)運(yùn)算符時(shí),結(jié)果是操作數(shù)的值,得到結(jié)果后,操作數(shù)的值加1。后自減(一)的工作運(yùn)算符類似于后自增運(yùn)算符,但不同之處在于操作數(shù)的值減1。注意:遞增和遞減1是指定的類型。25、前置增量和后置增量哪個(gè)更好?increment都有自己的重要性,我們需要根據(jù)要求使用它們。如果您通過(guò)字符指針逐字節(jié)讀取閃存,那么在這里您必須使用后增量,否則將跳過(guò)數(shù)據(jù)的第一個(gè)字節(jié)。在預(yù)遞增的情況下,指向地址將先遞增,然后再讀取該值。在下面的示例代碼中,創(chuàng)建一個(gè)字符數(shù)組并使用想要讀取數(shù)組值的字符指針。但是如果使用預(yù)增量運(yùn)算符會(huì)發(fā)生什么?這個(gè)問(wèn)題的答案是“A"將被跳過(guò)而B(niǎo)將被打印出hintm26、表達(dá)式ptr++和++ptr相同嗎?200,30,40,50);int*ptr=aiData;*ptr++;printf("aiData[0]=%d,aiData[1]=%d,*piData=%d",aiData[0],27、表達(dá)式*++ptr和++*ptr是否相同?別。示例1:#include<stdio.h>intmain(void){intaiData[5]={100,200,30,40,50};int*piData=aiData;++*piData;printf("aiData[0]=%d,aiData[1]=%d,*piData=%d",aiData[0],aiDat用const關(guān)鍵字會(huì)進(jìn)行類型檢查,但不會(huì)對(duì)#define進(jìn)行類型檢查。const由29、C語(yǔ)言中的volatile變量是什么?lepiData;/lpiDataisavolatilepointertoaninteger.x00000006uint32tconstvolatile*constpStatusReg=(uint32t*)0x00020000;unit32tGetRecvData(){//Codetorecvdatawhile(((*pStatusReg)32、C語(yǔ)言中的const和volatile限定符有什么區(qū)別?是的,可以同時(shí)使用常量和易失性。volatile和const關(guān)鍵字的最大用途之一是在訪問(wèn)GPIO寄存器時(shí)。在GPIO的情況下,如果它被配置為輸入,它的種情況下,volatile起著重要作用,并確保編譯器始終從GPIO地址讀取值并避免做出任何假設(shè)。使用volatile關(guān)鍵字后,無(wú)論何時(shí)訪問(wèn)端口,都將獲得正確的值,但這里還有一個(gè)問(wèn)題,因?yàn)橹羔槻皇莄onst類型,因此可能是程序C、清除、切換和檢查單個(gè)位?1,則保持不變。在C中,按位或運(yùn)算符(I)用于設(shè)置整數(shù)數(shù)據(jù)類型的位。作數(shù)(整數(shù)類型)在該位置為1時(shí)才為1。簡(jiǎn)而言之,如果其中任何一位為1,讓給定的整數(shù)是a和b。如果a的符號(hào)位與b的符號(hào)位不同,則a和b的符號(hào)RetValue=0;bRetValue=((a^b)<0);//trueifaandbhaveoppositesignsreturnbRetValue;}36、編寫(xiě)一個(gè)高效的C程序來(lái)反轉(zhuǎn)數(shù)字的位?有很多方法可以反轉(zhuǎn)數(shù)字的位,這里描述了三種通用的方法來(lái)反轉(zhuǎn)位。方法一在此方法中,將檢查num的設(shè)置位并循環(huán)遍歷整數(shù)的所有位。如果發(fā)現(xiàn)nuaracter#defineINTBITS(sizeof(int)*CHARBITS)//bitreversa參考以下代碼實(shí)現(xiàn):#defineCHAR_BITS8//sizeofcharacter#defineINTBITS(sizeof(int)*CHARBITS)//bitsinintegervoidPrintlnBinary(unsignedn){charPos=(INTBITS-1);for(;Pos>=0;--Pos){(n&(1<<Pos)##include<stdio.h>intmain(){intdata=16;data=data>>1;printf("%d\n",data);return0;}}C##include<stdio.h>{}printf("%d\n",c);CCvoidpvBuffer=NULL;pvBuffer=malloc(sizeof(int));rreturn0;}CC假設(shè)a、b兩個(gè)數(shù)字,有很多方法不使用第三個(gè)變量交換兩個(gè)數(shù)字的值。方法1(使用算術(shù)運(yùn)算符):#include<stdio.h>intmain(){inta=10,b=5;l/algotoswap'a'andb'a=a+b;lIabecomes15b=a-b;l/bbecomes10a=a-b;//fonallya下面來(lái)看看如何編寫(xiě)一個(gè)小算法來(lái)檢查2的冪。如果一個(gè)數(shù)字是2的冪,則函數(shù)返回1。示例代碼1:intCheckPowerOftwo(unsignedintx){return((xl=0)&&(!(x&(x-1));}示例代碼2:intCheckPowerOftwo(unsignedintx){return(x&&(!(x&(x-1))));}includestdio.h>intmain()}Cintmain(){intx=-30;X=X>>1;printf("%d",x);returnO;}CCnedintCountSetBits=0;while(n){CountSetBits+=n&1;n>>=1;}returnCountSetBits;}C應(yīng)數(shù)據(jù)包。實(shí)現(xiàn)鏈表和二叉樹(shù)。GPIO或硬件寄存器。從函數(shù)中獲取地址或更47、C語(yǔ)言中的void或泛型指針是什么?void指針是通用指針。它沒(méi)有關(guān)聯(lián)的數(shù)據(jù)類型,這就是為什么它可以存儲(chǔ)任何類型對(duì)象的地址并類型轉(zhuǎn)換為任何類型的原因。根據(jù)C標(biāo)準(zhǔn),指向void的指48、C語(yǔ)言中空(或void)指針的優(yōu)點(diǎn)是什么?C語(yǔ)言中的void指針有以下優(yōu)點(diǎn):使用void指針,可以創(chuàng)建一個(gè)可以接受任何數(shù)據(jù)類型參數(shù)的通用函數(shù)。memcpy和memmove庫(kù)函數(shù)是泛型函數(shù)的(void*dst,constvoid*src,sizetnum);void指針可以轉(zhuǎn)換為另一種數(shù)據(jù)類型,這就是malloc、calloc或realloc庫(kù)函數(shù)返回void*的原因。gintegerofsize10.piData=malloc(sizeoData;//piDataiswildpointer51、C語(yǔ)言中NULL指針是什么?根據(jù)C標(biāo)準(zhǔn),值為0的整數(shù)常量表達(dá)式,或轉(zhuǎn)換為void*類型的此類表達(dá)*fpData)(int);為了更好的理解,我們舉個(gè)例子來(lái)描述一下C語(yǔ)言中函數(shù)指針的聲明。示例:void(*pfDisplayMessage)(constchar*);在上面的機(jī)以及提供C語(yǔ)言中的多態(tài)特性等。55、C語(yǔ)言中的數(shù)組和指針有什么區(qū)別?下面的例56、下面C語(yǔ)言程序的輸出是什么(假設(shè)int大小為4個(gè)字節(jié))?//Supposeintegersize4bytesprintf("*arrsize%d",sizeof(*arr));return0;}C元素總數(shù),如果整數(shù)大小為4字節(jié),則*arr的大小將為80。根據(jù)C標(biāo)準(zhǔn),有四種存儲(chǔ)持續(xù)時(shí)間,靜態(tài)、線程(C11)、自動(dòng)和分配。存儲(chǔ)例。動(dòng)態(tài)內(nèi)存分配:在C語(yǔ)言中,有很多用于動(dòng)態(tài)分配內(nèi)存的庫(kù)函數(shù)(mallooc管58、C語(yǔ)言中的內(nèi)存泄漏是什么?:intmain(){char*pBuffer=malloc(sizeof(char)*20);/*Dosomework*/return0;/*Notfreeingtheallocatedmemory*/}注意:一旦分配了內(nèi)存,分配的內(nèi)存在空閑之前不會(huì)分配給另一個(gè)程序或進(jìn)程。語(yǔ)言中,calloc函數(shù)將所有分配的空間位初始化為零,但malloc不初始化分loc訪問(wèn)當(dāng)大小為零時(shí)由malloc返回的對(duì)象。分配算法可以有效地使用空閑內(nèi)存塊。為了理解外部碎片,考慮一個(gè)程序有3。在這種情況下,如果所需63、C語(yǔ)言中的fee()函數(shù)工作如何?的字節(jié)用于簿記。每當(dāng)調(diào)用free()函數(shù)并傳遞指向已分配內(nèi)存的指針時(shí),free在C語(yǔ)言中,可以使用sizeof運(yùn)算符計(jì)算靜態(tài)數(shù)組的大小,但沒(méi)有運(yùn)算符來(lái)n);如果內(nèi)存分配成功,則分配n(數(shù)組的大小)它的0個(gè)位置。piArray[##include<stdio.h>#include<stdlib.h>#defineALLOCMEMORY5intmain(){intloop=0;int*ptr=malloc(ALLOCMEMORY*sizeof(int));if(ptr==NULL){perror("failtoallocatememory");return-1;}for(loop=0;loop<ALLOCMEMORY;++loop){*(ptr+loop)=loop;}printf(”%d",*ptr++);printf(”%d",(*ptr)++);printf(”%d",*ptr);printf(”%d",*++ptr);printf(”%d",++*ptr);freeptr);return0;}C上面示例代碼輸出結(jié)果是:01223解釋:第一個(gè)printf:*ptr++意味著它一個(gè)后增量,所以首先和之后你得到0(ptr指向下一個(gè)位置)。第二個(gè)printf:("ptr)++第一次取消引用,然后增加值,所以位置值是1是增量,所以得到2(這用,所以得到2。第五個(gè)printf:*++ptr表示第一個(gè)指針在取消引用后遞這兩個(gè)副本函數(shù)都用于將n個(gè)字符從源對(duì)象復(fù)制到目標(biāo)對(duì)象,但它們有一些區(qū)別,如下所述。如果源指針和目標(biāo)指針指向的內(nèi)存區(qū)域重疊,則memcpy復(fù)制函數(shù)會(huì)顯示未定義的行為。memmove函數(shù)在重疊的情況下具有定義的行ude<string.h>#include<stdio.h>charstr1[50]="IamgoingfromDelhi字符串是字符的集合,它總是以空字符結(jié)尾,這意味著每個(gè)字符串在字符串的‘e’”Address0x000x010x020x03.傳輸字節(jié)的則首先存儲(chǔ)MSB字節(jié)(意味著在低地址),如果系統(tǒng)是小端序,則首先存儲(chǔ)LSB字節(jié)(在較低的地址)。little-endian和big-endian系統(tǒng)的一些示例:69、編寫(xiě)一個(gè)C程序來(lái)檢查系統(tǒng)的字節(jié)順序?下面使用C語(yǔ)言來(lái)編寫(xiě)程序檢查系統(tǒng)的字節(jié)順序。方法一:#include<stdio.h>#include<stdlib.h>#include<inttypes.h>intmain(void){uint32tu32RawData;uint8t*pu8CheckData;u32RawData=0x11223344;//Assigndatapu8CheckData=(uint8t*)70、如何在C中將little-endian轉(zhuǎn)換為big-endian(反之亦然)?法一:#include<stdio.h>#include<stdlib.h>#include<inttypes.h>//Functiontochangetheendianessuint32tChangeEndianness(uint32tu32Value){uint32tu32Result=0;u3素?cái)?shù)是一個(gè)正的自然數(shù),它的值大于1,并且只有兩個(gè)因數(shù)1和數(shù)本身。使用除法檢查素?cái)?shù)的算法開(kāi)始步驟1→取數(shù)n步驟2→將數(shù)字n除以(2,n-1)或(2,n/2)或(2,sqrt(n))。步驟3→如果數(shù)n可被(2,n-1)或(2,n/2)或(2,sqrt(n))之間的任何數(shù)整除,則它不是素?cái)?shù)步驟4→如果它不能被(2,n-1)或(2,n/2)或(2,sqrt(n))之間的任何數(shù)整除,則它是質(zhì)數(shù)最后停止示例代碼:72、如何在不使用sizeof運(yùn)算符的情況下在C中計(jì)算出數(shù)組的大小?方法一:#include<stdio.h>intmain(intargc,char*argv[){intiTotalElement=0;intaiData[]={10,20,30,40,50,60};//CalculatenumbersofelementsusingpointerarithmaticiTotalElement=*(&aiData+1)-aiDa73、如何在不使用sizeof運(yùn)算符的情況下在c中計(jì)算出結(jié)構(gòu)體的大小?向結(jié)構(gòu)的指針并分配N(xiāo)ULL指針。將指針增加到1。#include<stdio.h>#include<stdlib.h>typedefstruct{charName[12];intAge;floatWeight;int在結(jié)構(gòu)或聯(lián)合的情況下,編譯器在結(jié)構(gòu)或聯(lián)合的成員之間插入一些額外的字節(jié)用于對(duì)齊,這些額外未使用的字節(jié)稱為填充字節(jié),這種技術(shù)稱為填充。填充以75、在C語(yǔ)言中如何將二維數(shù)組作為參數(shù)傳遞?它將被拆分為指向數(shù)組的指針。例如如果intaiData[3][3],是一個(gè)2D整數(shù)h>//Sizeofthecreatedarray#define#defineMON0#defineTUE1#defineWED2#defineTHU3#defineFRI4#defineSAT5#defineSUN6//constantcreatedbyenum,typedefenumDays{Mon,Tue,通過(guò)給定的指針直接刪除節(jié)點(diǎn)沒(méi)有實(shí)際的解決方案,需要做一些技巧。通過(guò)給要?jiǎng)h除的指針將數(shù)據(jù)從下一個(gè)節(jié)點(diǎn)復(fù)制到當(dāng)前節(jié)點(diǎn)并刪除下一個(gè)節(jié)點(diǎn)。參->pNextNode;I/GetthedataofnextnodeNode->iData=temp->iData;I/GettheAddressofnexttonextnoap(x,y,T)do{Ttemp=(*x);(*x)=(*y);(*y)=temp;}while(0)intmain(void){inta=5;intb=9;printf("Valueofaandbbeforeswaping");79、C語(yǔ)言中的遞歸是什么?數(shù)字的階乘{(lán)test(n);I/Remainingcode}在上面的代碼中,test()是一個(gè)調(diào)用自身的遞歸基本上,C程序的內(nèi)存布局包含五個(gè)段,它們是堆棧段、堆段、BSS(由符號(hào)開(kāi)的內(nèi)存布局棧堆BSS(未初始化數(shù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論