一、register
作用:請求編譯器盡可能的將變數存在cpu內部暫存器中,一般的變數存在記憶體中,當需要時cpu再從記憶體中把它抓取到cpu中,使用register把它存在cpu中省去了cpu從記憶體中抓取資料的時間,提高執行效率。
注意:1、盡可能,因為cpu記憶體有限,不可能全放在裡面,一般把頻繁使用的變數放在裡面,如迴圈變數。
2、register只能修飾區域性變數,不能修飾 全域性變數和函式。
3、register修飾的變數不能使用取位址符獲取位址,因為它儲存在cpu裡,不在記憶體中。
4、register修飾的變數一定是cpu接受的型別。
二、static
static既能修飾變數也能修飾函式,修飾的資料儲存在全域性資料區的靜態資料區。
作用:1、被static修飾的區域性變數,延長了生存週期,程式結束後才會釋放。
2、被static修飾的全域性變數,只能在本檔案中使用,不能在其它檔案中訪問。
3、被static修飾的函式,只能在本檔案中呼叫,不能被其它檔案呼叫。
三、extern
作用:外部宣告,呼叫在其它檔案中定義的變數。
使用形式:extern int num 宣告要加型別。
四、const
作用:修飾乙個變數變為唯讀,通常用作函式形參。
例: const num = 5;
不能再通過變數名去修改num對應空間的值,但通過其他方法還是可以修改的。
如: int *p = #
(*p)++;
例: const int *p = #
三個運算
1、num++;
2、p++;
3、(*p)++;
解:3式可以成功,1、2兩式不能成功。const向右距離*p最近,所以*p是可以修改的。
五、typedef
作用:重定義
特殊:定義函式指標
typedef int(*p_fun)(int);
p_fun p_func;
六、volatile
七、define
作用:定義巨集。
特殊:
函式式巨集定義:#define max(a,b) a > b ? a : b
巨集函式與自定義函式區別:
巨集的執行速度快,省去了分配空間和釋放棧幀、傳參、傳返回值等一系列操作,適用於簡短且被頻繁呼叫的函式,是以編譯時間換空間的典例。
#ifndef
#define
#endif
可以防止因標頭檔案相互包含帶來的重複定義。
C 中struct關鍵字和class關鍵字的區別
剛開始接觸 c 看到 中有struct關鍵字,還以為是用了結構體,結果後來發現 struct 和 class 一樣都用於類的定義,於是把兩者的差別記錄於此。一句話總結 兩者均可用於定義類,唯一的區別是兩者定義的類的預設訪問許可權有差別。其實比兩者差別更重要的是,我很好奇為什麼 c 中會存在兩個用於定...
c 中mutable關鍵字
mutalbe的中文意思是 可變的,易變的 跟constant 既c 中的const 是反義詞。在c 中,mutable也是為了突破const的限制而設定的。被mutable修飾的變數,將永遠處於可變的狀態,即使在乙個const函式中。我們知道,如果類的成員函式不會改變物件的狀態,那麼這個成員函式一...
c中static關鍵字
看別人的c 會看到很多變數或者函式前面帶有static關鍵字。c中的static和php中的static有很到的不同,在php中static表示靜態化變數,乙個類中的static成員只與類有關,而與類的例項無關。c中的static關鍵字主要用於隱藏 access control 1.隱藏 函式前的s...