1. 程式人生 > >網際網路面試經典 -C/C++關鍵字

網際網路面試經典 -C/C++關鍵字

register:

register關鍵字的作用

請求CPU儘可能讓變數的值儲存在CPU內部的暫存器中,減去CPU從記憶體中抓取資料的時間,提高程式執行效率。

register作用的實現原理:

擴充套件:CPU組成,計算機系統組成,資料處理流程

什麼時候使用register?

一般,我們將頻繁被訪問的變數,用register修飾

(因為CPU記憶體資源是有限的,是稀缺的,不可能將所有變數都宣告為register變數)

使用register關鍵字應注意什麼

1.只有區域性變數才可以被宣告用register修飾

(register不能修飾全域性變數和函式的原因:全域性變數可能被多個程序訪問,而用register修飾的變數,只能被當前程序訪問)

2.不能用取地址獲取用register修飾的變數的地址(原因:變數儲存在暫存器中,而取地址獲取的地址的是記憶體的地址)

3. 用register修飾的變數一定要是CPU所接受的資料型別

Static:

Static關鍵字的作用

Static既可以修飾變數,也可以修飾函式,修飾變數時,既可以修飾區域性,也可修飾全域性。

Static修飾靜態區域性變數,延長變數的生命週期,直至程式結束,這個變數才釋放。

Static修飾全域性變數,使其只可在本檔案可訪問,其他檔案不可見。

(Static修飾的變數都儲存在資料段靜態資料區中,未初始化時,系統將預設初始化為0)

Static修飾函式,使其只可在本檔案可呼叫,其他檔案不可呼叫

什麼時候使用static修飾變數

當希望一個變數直至程式結束才釋放時,用Static修飾靜態區域性變數。

當希望一個全域性變數只可在本檔案可訪問,其他檔案不可見時,用Static修飾全域性變數。

當希望一個函式只可在本檔案可呼叫,其他檔案不可呼叫時,用Static修飾函式。

extern:

extern關鍵字的作用

extern用來外部宣告一個全域性變數,這個全域性變數在另一個檔案中被定義

使用extern關鍵字應注意什麼

標明資料型別  例:extern intcount;

什麼時候使用extern修飾變數

在a.c中想使用b.c的全域性變數用extern 外部宣告

const:

const關鍵字的作用

const修飾變數,是這個變數變成只讀變數,變數對應的空間的值是可變的,但不能用變數名來修改空間中的值。

const修飾指標。

使用const關鍵字應注意什麼

使用const關鍵字修飾的變數,一定要對變數進行初始化

int *const p = #   p++ ✘

const int *p = #   (*p)++ ✘

int const *p = #   (*p)++ ✘

(離誰進,誰就不可以改變)

什麼時候使用const修飾變數?

函式形參用const修飾,防止函式實現過程中,修改了實參的值。

typedef:

typedef關鍵字的作用

給資料型別定義一個新名字,

1.      提高了移植性

2.      簡化複雜的型別宣告,提高編碼效率

3.      解釋資料型別的作用

voliate:

voliate關鍵字的作用:

當要求使用volatile宣告變數值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的程式碼就不再進行優化,從而可以提供對特殊地址的穩定訪問;如果不使用valatile,則編譯器將對所宣告的語句進行優化。(簡潔的說就是:volatile關鍵詞 保證記憶體可見性,避免程式碼被優化,使變數每次取值都在記憶體中進行)。

一般來說,volatile關鍵字用在如下的幾個地方:

1、中斷服務程式中修改的供其他程式檢測的變數需要加volatile;2、多工環境下各任務間共享的標誌應該加volatile;3、儲存器對映的硬體暫存器通常也要加volatile說明,因此每次對它的讀寫都可能有不同意義。

Inline:

inline關鍵字的作用:

inline是給編譯器的優化提示,如果一個函式被編譯成inline的話,那麼就會把函式裡面的程式碼直接插入到呼叫這個函式的地方,而不是用呼叫函式的形式。

使用inline關鍵字應注意什麼

內聯是以程式碼膨脹(複製)為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。如果執行函式體內程式碼的時間,相比於函式呼叫的開銷較大,那麼效率的收穫會很少。另一方面,每一處行內函數的呼叫都要複製程式碼,將使程式的總程式碼量增大,消耗更多的記憶體空間。