C語言深度解剖

2021-08-25 22:15:16 字數 2477 閱讀 7687

1.關鍵字

是編譯器能認識的特殊字串符號。c語言共有32個關鍵字,含sizeof,計算物件所佔記憶體空間的大小。

2.定義

建立乙個物件並分配一塊記憶體。

3.宣告

告訴編譯器,名字已經匹配到了一塊空間,別的地方不能用它來作為變數名或物件名。宣告沒有分配記憶體,可以出現多次宣告。

4.區域性變數

也叫自動變數。是乙個一次性變數,用的時候入棧,不用的時候出棧,這樣可以更高效的利用記憶體。

5.全域性變數

區域性變數和全域性變數都存在記憶體的靜態區。

6.register

請求編譯器盡可能的將變數存在cpu內部暫存器而不是通過記憶體定址訪問以提高效率。計算機暫存器數量及其有限、價錢高。

register變數必須是乙個單個的值,長度<=整型的長度。register變數可能不存放在記憶體中,所以不能用&符號獲取位址。

7.static

①修飾變數

靜態全域性變數:作用域僅限於變數被定義的檔案中,從定義之處開始,到檔案結尾結束。

靜態區域性變數:只能在本函式裡使用,被static修飾的變數都總是被放在了記憶體靜態區,即使這個函式執行結束,這個靜態變數也不會被銷毀,再次呼叫函式下次依然在使用時會用到這個值,也就是指static int a=10;語句只執行一次。

②修飾函式

使函式成為靜態函式,作用域只限於在本檔案(所以又稱內部函式),不用擔心與其他檔案的函式同名。

8.變數的命名規則

最好採用英文單詞或組合,不要使用拼音。

int currentval;

程式不得出現僅靠大小寫區分的相似識別符號,如dog、gog、

乙個函式名禁止被用於其他之處。

所有巨集定義、列舉常數、唯讀變數全用大寫字母命名,用下劃線分割單詞。如max_length.

整型型別n,m,i,j,k 字元型別c,ch 指標p 陣列a。

9.bool型別與0值比較

if語句真執行,假不執行。if(flag)

10.指標變數與0值比較

int *p=null;

if(null==p) if(null!=p)

11.在switch case中

1)每個case語句後面加上break;

2)必須使用default分支,即便你不用。

12.迴圈語句應將長迴圈放在最內層,短迴圈放在最外層,可以減少cpu跨切迴圈層的次數。

13. void *則不同,任何型別的指標都可以直接賦值給它,反之錯誤。

void *p1;

int *p2;

p1=p2; //正確

14.在c語言中

若函式不接受任何引數,一定要指明引數為 void。

15.volatile

易變的、不穩定的。保證對記憶體的可見性,編譯器對訪問該變數的**不在進行優化。

16.extern

外面的、外來的。

17.空結構體

大小為1個位元組。任何一種資料型別都有其大小。

18.柔性陣列

結構中最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員,但這個成員前面必須至少有乙個其他成員。sizeof返回的這種結構大小不包括柔性陣列的記憶體。

typedef

struct st_type

type_a;

//柔性陣列算不得結構體正式成員,就算開闢了記憶體空間,大小也不包含柔性陣列的大小。

19.struct與class

struct預設為公有的,class預設為私有的,結構體裡可以放函式。

20.union

所有資料成員共用乙個空間,具有相同的起始位址,同一時間只能儲存其中乙個資料成員。

intchecksystem( )

c; c.i = 1;

return(c.ch ==1);

}

21.enum

1)不賦值則會從被賦初值的那個常量開始,依次加 1,如果都沒有賦值,它們的值從 0 開始依次遞增 1。

2)可以除錯列舉常量,但是不能除錯巨集常量,巨集一次只能定義乙個。

C語言深度解剖

c語言深度解剖 本書目錄結構如下 第一章 關鍵字 1.1 最寬恒大量的關鍵字auto 1.2 最快的關鍵字register 1.3 最不實名的關鍵字static 1.4 基本資料型別 1.5 最冤枉的關鍵字sizeof 1.6 if else組合 1.7 switch case組合 1.8 do w...

C語言深度解剖小結

ansi c標準c語言共有32個 關鍵字,這些關鍵字如下 auto break case char const continue default do double else enum extern float for goto if int long register return short s...

c語言深度解剖筆記

關鍵字 register 這個關鍵字請求編譯器盡可能的將變數存在 cpu內部暫存器中而不是通過記憶體定址訪問以提高效率。注意是盡可能,不是絕對。你想想,乙個 cpu的暫存器也就那麼幾個或幾十個,你要是定義了很多很多 register 變數,它累死也可能不能全部把這些變數放入暫存器吧,輪也可能輪不到你...