C和C指標讀書筆記

2021-07-11 04:17:58 字數 1724 閱讀 6580

1. c中變數的儲存型別

儲存型別分為靜態儲存(普通記憶體),堆疊,暫存器自動變數即**塊內部的變數儲存於堆疊,其他變數儲存於普通記憶體即靜態儲存,如果頻繁訪問乙個變數,宣告為暫存器型別後儲存於硬體暫存器中。

2. c中實體的鏈結屬性

(1)屬於internal鏈結屬性的識別符號在同乙個原始檔內的所有宣告中都指向同乙個實體,但位於不同原始檔的多個宣告分屬不同的實體。

(2)屬於external鏈結屬性的識別符號無論宣告多少次、位於幾個原始檔都表示同乙個實體。

(3)屬於none鏈結屬性的識別符號總是被當作單獨的個體,也就說該識別符號的多個宣告被當作不同的實體。

(4)只要變數並非宣告於**塊或函式定義內部,它在預設情況下的鏈結屬性即為external。如果乙個變數宣告 於**塊內部,在它前面新增extern關鍵字將使它所引用的是全域性變數而非區域性變數。

(5)具有external鏈結屬性的實體總是具有靜態儲存型別

3. c中的extern和static

(1)這兩個關鍵字用於在宣告中修改識別符號的鏈結屬性。比如某個宣告具有external鏈結屬性,前面加上static關鍵字使它的鏈結屬性變為internal。

(2)除了實體的具體定義位置之外,在它的其他宣告位置都使用extern關鍵字。

4. 儲存型別、作用域、鏈結屬性的總結

5. 區域性變數名於全域性變數名相同時,在**塊內將使用區域性變數,全域性變數將被隱藏直到**塊末尾。

6. const宣告其值不會修改的變數,在定義const唯讀變數時需初始化,以後無法修改;函式引數為const唯讀,那麼在函式內部不能修改此引數。

7.關於移位操作符

(1)<< 和 >>為移位操作符(分別為左移和右移)

(2)他們的左運算元為待移動的數,右運算元為移動的位數

(3)待移的數必須為整形,最好是無符號整形,這樣不管是左移還是右移,其邏輯移位和算術移位都一樣。

(4)如果是帶符號整形,左移邏輯移位和算術移位一樣(左移的邏輯移位指左面的位移掉,右邊添0)。右移的邏輯移位是右面的移掉,左面添0,右移的算術移位是右面的移掉,左面的如果符號位是1就添1,符號位是0就添0,這個也跟編譯器有關,所以可移植性不強。

8. 對不同型別的值進行比較或賦值,往往不能得到想要的結果。

9. ++和--

(1)字首形式的++操作符出現在運算元的前面,運算元的值被增加,而表示式的值就是運算元增加後的值。(先加後用)

(2)字尾形式的++操作符出現在運算元的後面,運算元的值被增加,但表示式的值是運算元增加前的值。(先用後加)

10. 如果無法確定乙個表示式的最終值的儲存位置,那麼這個表示式就不是乙個合法的左值。

11. 指標運算,不管是加減乘除,還是大於等於等比較,前提是兩個運算元必須指向同乙個陣列中的元素,即連續線性的記憶體。

12. 除了優先順序之外,下標引用和間接訪問完全相同,比如a[1] = * (a+1)。

13. int *a; a++;  第二條語句進行了乘法運算,原因是指標+1,結果是當前位址+4(編譯器會把1乘以指標指向型別所佔記憶體,這裡是4,然後加上當前位址,得到最終結果為表示式結果)。

14. array[i++]也進行了乘法運算,這個乘法運算會比第4點中的乘法運算更花時間和空間,因為第4點中執行乘法運算的都是兩個相同的數(1和4)。

結果,這個乘法只在編譯時執行一次,即程式現在包含了一條指令,把4與指標相加,程式執行時並不執行乘法運算。

《C和指標》讀書筆記 6

宣告 該讀書筆記摘抄自 c和指標 kenneth a.reek 著 徐波 譯 為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。一 遞迴的兩個特性 1 存在限制條件 2 每次遞迴之後越來越接近限制條件 二 將二進位制數字轉換為...

《C和指標》讀書筆記 7

宣告 該讀書筆記摘抄自 c和指標 kenneth a.reek 著 徐波 譯 為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。一 陣列名 1 乙個誤區 陣列名並不表示整個陣列,它大多時候只是乙個指標常量,指向陣列的第乙個元素...

《C和指標》讀書筆記 8

宣告 該讀書筆記摘抄自 c和指標 kenneth a.reek 著 徐波 譯 為了克服自己走馬觀花,提高閱讀和學習效率,決定將自己在讀書過程中遇到的一些知識點加以摘抄和總結備忘,在此感謝原書作者和翻譯。一 字串長度 1 標準庫函式 size t strlen char const string 標頭...