C++面試寶典(整理版)4

 60.解釋局部變量、全局變量和靜態變量的含義。

局部變量,作用域在指定的函數範圍內,超出作用域自動釋放。如果與全局變量同名,則在局部範圍內以局部變量爲主。
全局變量,有效範圍從定義變量的位置開始到本源文件結束,
靜態變量,生存週期與全局變量一樣長,有效範圍僅限於聲明的位置,如果聲明的位置是函數內部,則在函數內部可見,如果是文件範圍聲明,則在當前文件(聲明變量之後)有效。

61.論述含參數的宏與函數的優缺點。 

含參數宏具有宏的特性(原文替換宏定義部分的代碼),代碼執行效率高,但無法對參數進行限制,特別是執行指針,如以*p++作爲參數時,會出現執行含參數宏後,參數發生變化的bug,要慎用。
函數,封裝一定邏輯的操作,提高代碼的複用性,同時能夠使用const關鍵字,限制參數在函數內部改變等安全機制,使用起來更加安全,但效率上需要執行函數的調用與參數入棧的過程,有時間開銷。

61.Windows程序的入口是哪裏?寫出Windows消息機制的流程。 

Widnows程序入口:WinMain()
消息機制流程:
1.Windows中有一個系統消息隊列,對於每一個正在執行的Windows應用程序,系統爲其建立一個“消息隊列”,即應用程序隊列,用來存放該程序可能創建的各種窗口的消息。應用程序中含有一段稱作“消息循環”的代碼,用來從消息隊列中檢索這些消息並把它們分發到相應的窗口函數中。
2.Windows爲當前執行的每個Windows程序維護一個「消息隊列」。在發生輸入事件之後,Windows將事件轉換爲一個「消息」並將消息放入程序的消息隊列中。程序通過執行一塊稱之爲「消息循環」的程序代碼從消息隊列中取出消息:
相關鏈接:
http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html
http://blog.csdn.net/tigernana/article/details/8079675  

 

62.C++裏面是不是所有的動作都是main()引起的?如果不是,請舉例。   

C++裏面的動作不是全部有main()引起的,利用全局變量的初始化工作,在main()函數的執行前進行。
 
各類情況下的入口點函數:
mbcs的console程序的默認起點是main,
unicode的console程序是wmain
unicode的windows應用程序wWinMain
mbcs   的windows應用程序是WinMain
unicode和mbcs的dll則是  DllMain

63.軟件開發五個主要step是什麼?

你在開發軟件的時候,這5個step分別佔用的時間百分比是多少? 

a 需求分析: 分析並確定用戶需求,用採用適當的模型規範地表述這一需求,形成分析模型爲要處理的現實世界中的事物建立抽象建模。
b 系統設計: 設計階段:確定系統如何實現所需的功能----採用適當的數據結構+控制邏輯,將分析模型細化。
c 編碼實現: 選定一種適當的編程語言,編碼實現上述的設計,並在開發過程中引入測試,完善整個解決方案。
d 測試階段
e 系統維護
 

64.static有什麼用途?(請至少說明兩種)

答 、

1.限制變量的作用域(文件級的)。

2.設置變量的存儲域(全局數據區)。

 

65.引用與指針有什麼區別?

答 、

1) 引用必須被初始化,指針不必。

2) 引用初始化以後不能被改變,指針可以改變所指的對象。

3) 不存在指向空值的引用,但是存在指向空值的指針。

66.描述實時系統的基本特性

答 、在特定時間內完成特定的任務,實時性與可靠性

 

67.全局變量和局部變量在內存中是否有區別?如果有,是什麼區別?

答 、全局變量儲存在靜態數據區,局部變量在堆棧中。


68.什麼是平衡二叉樹?

答 、左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對值不大於1。

 

69.堆棧溢出一般是由什麼原因導致的?

答 、1.沒有回收垃圾資源

        2.層次太深的遞歸調用     

 編譯器默認有一個堆棧大小限制,所有函數調用及函數內部申請的局部變量都是在棧內分配內存,每次調用函數時都會把當前函數的狀態入棧,調用參數入棧,然後開始執行調用函數,當函數執行完畢後,通過出棧操作還原上一級函數的調用狀態,當調用層數過多,或者申請局部變量過大,總內存大小超過默認棧大小,就會出現溢出的情況。

70.什麼函數不能聲明爲虛函數?

答 、constructor

       Deconstructor 可以聲明爲虛函數。

       系統爲一個空類創建的成員函數有那些。

 

71.冒泡排序算法的時間複雜度是什麼?

答 、O(n^2)

 

72.寫出float x 與“零值”比較的if語句。

答 、if(x>0.000001&&x<-0.000001)

float由於精度誤差的緣故無法與0做等值比較判斷,只能在高精度的極小數值進行範圍判斷,確定是不是等於0。

73.Internet採用哪種網絡協議?該協議的主要層次結構?

答 、tcp/ip 應用層/傳輸層/網絡層/數據鏈路層/物理層

 

74.Internet物理地址和IP地址轉換採用什麼協議?

答 、ARP (Address Resolution Protocol)(地址解析協議)

 

75.IP地址的編碼分爲哪倆部分?

答 、IP地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與之後才能區分哪些是網絡位哪些是主機位。

 

76.用戶輸入M,N值,從1至N開始順序循環數數,每數到M輸出該數值,直至全部輸出。寫出C程序。

答 、循環鏈表,用取餘操作做

 

77.不能做switch()的參數類型是:

答 、switch的參數不能爲實型,字符串。


78.局部變量能否和全局變量重名?

答、能,局部會屏蔽全局。要用全局變量,需要使用"::"

局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對於有些編譯器而言,在同一個函數內可以定義多個同名的局部變量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體內。

 

79.如何引用一個已經定義過的全局變量?

答 、可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連接期間報錯。


80.全局變量可不可以定義在可被多個.C文件包含的頭文件中?爲什麼?

答 、可以,在不同的C文件中以static形式來聲明同名全局變量。

可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯


發佈了23 篇原創文章 · 獲贊 10 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章