C語言面試題

一. 全局變量與局部變量

1. 局部變量能與全局變量重名,但局部變量會屏蔽全局變量,若要使用全局變量,需要使用“::”。在函數內引用這個變量時,會使用到局部變量,而不是全局變量。

2.可以引用已經定義過的全局變量,一個使用關鍵詞extern,一個使用引用頭文件的方式。使用關鍵詞extern,全局變量編寫錯誤,在連接期間報錯,而另外一種在編譯期間報錯。
3.全局變量頭文件中可以定義在多個.C文件包含的頭文件中,在不同的C文件中以static形式來聲明同名全局變量,可以在不同的C文件中聲明同名的全局變量,但是只能有一個C文件對該全局變量進行初始化賦值,否則會連接錯誤。
4.程序的局部變量存在於(堆棧)中,全局變量存在於(靜態區)中,動態申請數據存在於(堆)中。
5.
(1)static全局變量與普通的全局變量的區別:static全局變量只初始化一次,防止在其他文件單元中被引用;
(2)static局局變量與普通的局局變量的區別:static局部變量只被初始化一次,下一次依據上一次結果值;
(3)static函數與普通函數的區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝。
6.隊列先進先出,棧先進後出。
7.對於一個頻繁使用的短小函數,在C語言中應用用宏定義實現。
8.確定模塊的功能和模塊的接口是在軟件設計的概要設計階段完成的。

9.線程是進程內的一個執行單位,也是進程內的可調度實體。線程與進程的區別:

(1)調度:線程作爲調度和分配的基本單位,進程作爲擁有資源的基本單位;

(2)併發性:不僅進程之間可以併發執行,同一個進程的多個線程之間也可以併發執行;

(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源;

(4)系統開銷:在創建或撤銷進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤銷線程時的開銷。

10.Heap是堆,Stack是棧。Stack的空間由操作系統自動分配/釋放,Heap上的空間手動分配/釋放。Stack空間有限,Heap是很大的自由存儲區。C語言中的malloc函數分配的內存空間即在堆上,C++中對應的是new操作符。程序在編譯期對變量和函數分配內存都在棧上進行,且程序運行過程中函數調用時參數的傳遞也是在棧上進行。

11.預編譯就是指程序執行前的一些預處理工作,主要指#表示的。在以下兩種情況下需要預處理:(1)總是使用不經常改動的大型代碼體;(2)程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。可以將所有包含文件預編譯爲一個預編譯頭。

12.關鍵詞const的含義:

(1)表示常量不可以修改的變量;

(2)可以修飾參數,作爲輸入參數;

(3)修飾函數,防止以外的改動;

(4)修飾類的成員函數,不改變類中的數據成員。

13.淺拷貝和深拷貝區別是什麼:深拷貝拷貝的是內容,淺拷貝拷貝的是指針。深拷貝和淺拷貝最大的區別就是子類對象的地址是否改變,如果子類對象的地址改變那麼就是深拷貝。簡單的來說就是,在有指針的情況下,淺拷貝只是增加了一個指針指向已經存在的內存,而深拷貝就是增加一個指針並且申請一個新的內存,使這個增加的指針指向這個新的內存,採用深拷貝的情況下,釋放內存的時候就不會出現在淺拷貝時重複釋放同一內存的錯誤。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章