The key of C Language

1.const修飾符

 (1) 阻止變量被改變時使用const修飾符,因此聲明變量時要進行初始化,進行唯一一次賦值。當我們使用宏定義定義常量時,只是簡單地內容替換,編譯器並沒有進行類型檢查,而使用const時編譯器會進行類型檢查。

(2)指針常量:如int a = 1;int * const p = &a;指針指向的地址不能更改,但是地址中存儲的對象可以更改。

          常量指針:如int b = 1; int const *p = &b;(const int *p = &b;)指針指向的地址可以更改,但是地址中存儲的對象不能更改。

2.static修飾符

(1)當一個進程的全局變量被聲明爲static之後,變爲靜態全局變量。靜態全局變量和其他的全局變量的存儲地點沒有區別,都是在.data段(已初始化)或者.bss段(未初始化)內,但是它只在定義它的源文件內有效,其他源文件無法訪問它。

(2)static局部變量叫靜態局部變量。它與普通的局部變量的區別:位置:靜態局部變量被編譯器放在全局存儲區.data(注意:不在.bss段內),所以它雖然是局部的,但是在程序的整個生命週期中存在。訪問權限:靜態局部變量只能被其作用域內的變量或函數訪問。雖然它會在程序的整個生命週期中存在,由於它是static的,它不能被其他的函數和源文件訪問。值:靜態局部變量如果沒有被用戶初始化,則會被編譯器自動賦值爲0,以後每次調用靜態局部變量的時候都用上次調用後的值。每次函數調用靜態局部變量的時候都修改它然後離開,下次讀的時候從全局存儲區讀出的靜態局部變量就是上次修改後的值。

3.volatile修飾符

(1)編譯器在優化的過程中做了優化處理:編譯器發現在對變量賦值之後沒有再次改變它的值,所以編譯器把它的值備份在了一個寄存器中,在之後的操作中我們再次使用它的值的時候就直接操作這個寄存器,而不去讀取它的內存地址,因爲讀取寄存器的速度要快於直接讀取內存的速度。這就使得了讀到的它的值爲之前的。而不是更新後的。

(2)volatile修飾符的作用就是告訴編譯器不要對它所修飾的變量進行任何的優化,每次取值都要直接從內存地址得到。對於我們代碼中的那些易變量,我們最好使用volatile修飾,以此來得到每次對其進行更新後的值。

(3)使用場合:中斷服務程序中修改的供其它程序檢測的變量需要加volatile;多任務環境下各任務間共享的標誌應該加volatile。

4.sizeof()運算符

(1)sizeof是C語言的一種單目操作符,如其他操作符++、--等,它不是函數。sizeof操作符以字節形式給出了其操作數的存儲大小。操作數可以是一個表達式或數據類型名。操作數的存儲大小由操作數的數據類型決定。

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