面試C/C++ 觀念整理
文章推薦指數: 80 %
這裡有些題目是來自網路上MTK面試的C考古題,另外又加入了一些易搞混的觀念,幫自己統整一下,也希望能幫助在求職的讀者,面試的過程真的心很累啊!
GetunlimitedaccessOpeninappHomeNotificationsListsStoriesWrite面試C/C++觀念整理這裡有些題目是來自網路上MTK面試的C考古題,另外又加入了一些易搞混的觀念,幫自己統整一下,也希望能幫助在求職的讀者,面試的過程真的心很累啊!如果有寫錯的地方再麻煩告知我。
目前這邊已沒有繼續維護,可至我個人blog:https://deeprecurrent.github.io/2021/09/25/210925_cpp_interview/Explain“#error”?預處理指令。
預處理階段只要遇到#error就會生成一個錯誤提示訊息並停止Whatis“const”?andwhatisthemeaningof:constinta;intconsta;constint*a;int*consta;intconst*aconst;const代表只可讀不可改。
1.一個常數型整數2.同1,一個常數型整數3.一個指向常數型整數的指標(整型數不可修改,但指標可以)4.一個指向整數的常數型指標(指標指向的整數可以修改,但指標不可修改)5.一個指向常數型整數的常數型指標(指標指向的整數不可修改,同時指標也不可修改)Explain“struct”and“union”?struct稱為結構體,可以包含數個不同資料型態的變數,所有變數佔用不同的內存。
union稱為聯合體,也可以包涵不同資料型態的變數,但是所有辨識站又相同內存。
Explain“volatile”.Canweuse“const”and“volatile”inthesamevariable?Canweuse“volatile”inapointer?一個定義為volatile的變量是說這變量可能會被意想不到地改變(尤其在嵌入式系統),因此編譯器不會去假設這個變量的值了。
精確地說就是,優化器不會將其優化,而是在用到這個變量時必須每次都重新讀取這個變量的值,不是使用保存在暫存器裡的備份。
下面是volatile變量的幾個例子︰1.並行設備的硬體暫存器(如︰狀態暫存器)2.一個中斷服務子程序中會訪問到的非自動變數(Non-automaticvariables)3.多執行緒中共享的變數是的。
一個例子是只讀的狀態寄存器(不應該被程式修改,但有可能被硬體修改,比如interruptroutine)。
它是volatile因為它可能被意想不到地改變。
它是const因為程序不應該試圖去修改它。
是的。
比如當一個中斷服務的子程序修改一個指向buffer的pointer時。
Whatisthedifferencebetween“InlineFunction”and“Macro”?Macro是在預處理時直接單純的文字替換,inlinefunction是在compile階段時,直接取代function。
比較下面兩個例子:inline寫法:inlineintsquare(intx){returnx*x;}output:SQUARE(3+2)→(3+2)*(3+2)=25Macro寫法:#defineSQUARE(x)(x*x)output:SQUARE(3+2)→3+2*3+2=11Explain“static”?1.static出現在變數前,且該變數宣告於函式中(C/C++):局部變數加上static修飾後便不會因為離開可視範圍而消失。
2.static出現在變數前,且該變數不是宣告於函式中(C/C++):讓變數只限定在該檔案內,而不是整個程式中(解決編譯時連結多個檔案造成相同變數名衝突)。
3.static出現在類別的成員變數前(C++only):表示該變數不屬於某個類別實例,他屬於這個類別,所有以此類別生成出來的實例都共用這個變數。
4.static出現在類別的成員函式之前(C++only):表示該函式不屬於某個類別實例,他屬於這個類別,所有以此類別生成出來的實例都共用這個函式(即便我們沒有產生實例出來,我們也隨時可以取用這個函式)(同python的@staticmethod)。
referenceWhatisstackandheapwhentalkingaboutmemory?Stack:allocatedbycompiler,storefunctionparametersandlocalvariables1.veryfastaccess2.don'thavetoexplicitlyde-allocatevariables3.spaceismanagedefficientlybyCPU,memorywillnotbecomefragmented4.localvariablesonly5.limitonstacksize(OS-dependent)6.variablescannotberesizedHeap:allocatedbyprogrammer1.variablescanbeaccessedglobally2.nolimitonmemorysize3.(relatively)sloweraccess4.noguaranteedefficientuseofspace,memorymaybecomefragmented5.youmustmanagememory(you'reinchargeofallocatingandfreeingvariables)ormemoryleakagewillhappen6.variablescanberesizedusingrealloc()Static:storeglobalvariableandstaticvariable(initializedwhenprocessstarts)LiteralConstant:storecomments(text)Explain“thread”and“process”,andwhatisthedifference?Process:anexecutinginstanceofanprogram.Processtakesmoretimetoterminateanditisisolatedmeansitdoesnotsharememorywithanyotherprocess.Thread:apathofexecutionwithinaprocess.Threadtakeslesstimetoterminateascomparedtoprocessandlikeprocessthreadsdonotisolate.Theysharememorywithotherthreads.-->Thetypicaldifferenceisthatthreads(ofthesameprocess)runinasharedmemoryspace,whileprocessesruninseparatememoryspaces.Readmoredefineavariable“a”fromthefollowingrequests:AnintegerApointertoanintegerApointertoapointertoanintegerAnarrayof10integersAnarrayof10pointerstointegersApointertoanarrayof10integersApointertoafunctionthattakesanintegerasanargumentandreturnsanintegerAnarrayoftenpointerstofunctionsthattakeanintegerargumentandreturnanintegerANS.1.inta2.int*a3.int**a4.inta[10]5.int*a[10]6.int(*a)[10]7.int(*a)(int)8.int(*a[10])(int)Whatisthecontentofarraya?inta[]={6,7,8,9,10};int*p=a;*(p++)+=123;*(++p)+=123;ANS:{129,7,131,9,10}Typedef在C語言中頻繁用以宣告一個已經存在的資料型態的同義字。
也可以用預處理器做類似的事。
例如,思考一下下面的例子︰#definedPSstructs*typedefstructs*tPS;以上兩種情況的意圖都是要定義dPS和tPS作為一個指向結構s指標。
哪種方法更好呢?(如果有的話)為什麼?答案是︰typedef更好。
思考下面的例子︰dPSp1,p2;tPSp3,p4;第一個擴展為structs*p1,p2;上面的程式碼定義p1為一個指向結構的指標,p2為一個實際的結構,這也許不是你想要的,所以沒事不要亂用macro。
Whatisthedifferencebetweenvariabledeclarationanddefinition?Adeclarationprovidesbasicattributesofasymbol:itstypeandname.Adefinitionprovidesallofthedetailsofthatsymbol.Istheprogrambelowcorrect?unsignedintzero=0;unsignedintcompzero=0xFFFF;/*1’scomplementofzero*/對于一個整數型不是16位元的處理器為說,上面的程式碼是不正確的。
應編寫如下︰unsignedintcompzero=~0;Whatistheoutputofthefollowingprogram?voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(“>6”):puts(“<=6”);}當表達式中存在有符號類型和無符號類型(unsigned)時所有的操作數都自動轉換為無符號類型。
因此-20變成了一個非常大的正整數,所以該表達式計算出的結果大于6。
Thefasterwaytoanintegermultiplyby7?i=(i<<2)+(i<<1)+(i<<0)Reverseastring.voidreverseStr(string&str){intn=str.length();for(inti=0;i
結果,這段程式碼可能返回不是你所期望的平方值!正確的程式碼如下︰longsquare(volatileint*a){intb;b=*a;returnb*b;}保證n一定是下面五個數字之一,不能用if和switchcase,請用你認為最快的方法實作mainexternvoidfunc1(void);externvoidfunc2(void);externvoidfunc3(void);externvoidfunc4(void);externvoidfunc5(void);voidmain(intn){ifn==1executefunc1;ifn==2executefunc2;ifn==3executefunc3;ifn==4executefunc4;ifn==5executefunc5;}typedefvoid(*fp)(void);fpfpa[5];fpa[1]=func1;//equivalenttofpa[1]=&func1fpa[2]=func2;fpa[3]=func3;fpa[4]=func4;fpa[5]=func5;voidmain(intn){(*fpa[n])();}--MorefromwenchenFollowwenchenq.github.ioLovepodcastsoraudiobooks?Learnonthegowithournewapp.TryKnowableRecommendedfromMediumROTL-'DarkstormBringers'NFT(熱血江湖)OfficialMintSiteforROTL:DarkstormBringersAnviLewisTop15Front-endDevelopmentToolsToUseIn2021DilpreetSinghinTechShotsWhatViewPager2hastooffer?HyperDAOPresentedbyHyperDAO✨MateomojicaWhatnobodytellsyouaboutHTMLasabeginnerSatishPanwarinHitachiSolutionsBraintrustJobhistorycleanupinDynamics365FinanceandSupplyChainManagementNoLongerSetMarkoftheWeb(MOTW)SupportAmongZipUtilitiesYeoninleiron예외정리AboutHelpTermsPrivacyGettheMediumappGetstartedwenchen8Followerswenchenq.github.ioFollowMorefromMediumCosmicDriftTheLegendofIfstrath,TheBeaconGillianAndrewsWomenandPower — GillianAndrewsAuthorThinkOrSwimparaEspaña(nooficial)📈LosmejoresscriptsparalaplataformadenegociaciónThinkorswim(TOS)PeytonMurneyProject4:(PossiblyLost&)FoundObjectsHelpStatusWritersBlogCareersPrivacyTermsAboutKnowable
延伸文章資訊
- 119道必须掌握的C++面试题 - 编程狮
在面试C++方面的工作时,经常会遇到各种面试题,这对应聘人员的知识掌握能力要求较高。本文将为大家带来的就是20道必须掌握的C++面试题,不要错过哦!_来自C++ 教程 ...
- 2C面試考題
註:傳參考是C++才有的東西,C語言是沒有的唷! void swap (int &c , int &d){ int temp=c; c=d; d=temp; } int main(){ int ...
- 3【C/C++】【面試】 考古題經驗分享- 初級 - DummyH的部落格
【C/C++】【面試】 考古題經驗分享- 初級 · 此篇只涉及C語言的基礎概念,熟悉C語言的開發者可跳過此篇。 · 在應徵程式設計師的面試中,常會有該語言的專業 ...
- 4[面試考題] C/C++ - 一個小小工程師的心情抒發天地
[面試考題] C/C++ ... 上帝幫你關了一扇門,就會幫你開一扇窗,. 所以,我打算幫準備寫考卷的你/ 妳開一扇窗,. 我將答案放在我的blog裡面,. 如果你有看到 ...
- 5五萬字長文C C++ 面試知識總結(上) | IT人
C/C++ 面試知識總結這是一篇五萬字的C/C++面試知識點總結,包括答案:這是上篇,下篇今天也推送了,需要的同學記得去看看。本文花費了博主大量的時間 ...