static作用:
修飾局部變量,改變局部變量生命周期。(具有記憶功能)
下面我們看個例子:
(1)變量不加 static 修飾
運作結果如下:
(2)變量被 static 修飾
運作結果如下:
總結:
- 不加static修飾,函數或者代碼塊中的變量在函數或者代碼塊執行完畢後就直接回收銷毀了,每次執行都會重新配置設定記憶體,每次都會銷毀。
- 加 static 修飾,函數或者代碼塊中的變量在函數或者代碼塊執行第一次初始化配置設定記憶體後,就算函數或者代碼塊執行完畢,該變量也不會被回收銷毀,直到程式結束 static 變量才會被回收。
- 當 static 作用于代碼塊
内部定義的變量(局部變量)聲明時,static關鍵字用于修改變量的存儲類型(生命期),使變量從自動變量成為靜态的局部變量,即編譯時就為變量配置設定記憶體,直到程式退出才釋放存儲單元。這樣,使得該局部變量有記憶功能,可以記憶上次的資料。{ }
- 當 static 作用于函數定義,或者用于代碼塊
之外的變量(外部變量)聲明時,static關鍵字用于修改辨別符的連結屬性。外部連結屬性變為内部連結屬性,辨別符的存儲類型和作用域不受影響。也就是說變量或者函數隻能在目前源檔案中通路,不能在其他源檔案中通路。{ }
extern作用
僅僅是用來聲明外部全局變量(注:extern不能用來定義變量)。
為了起到全局變量的作用,即一個變量在一個檔案中定義了,可以在其他檔案中修改。這樣可以在.h頭檔案中,使用extern修飾,然後在其他檔案中使用該變量。
int a; ——> 這是聲明變量a
int a = 0; ——>這是定義一個變量a
extern int x; //變量是聲明,并未實際配置設定位址。
const作用
const 修飾的資料類型是指常類型,常類型的變量或對象的值是不能被更新的。或者說const意味着隻讀。這樣可以保護被修改的東西,防止意外的修改,增強程式的健壯性。
參看:C語言再學習 – 關鍵字const
volatile作用
volatile 關鍵字是一種類型修飾符。volatile 的作用是作為指令關鍵字,確定本條指令不會因編譯器的優化而省略,且要求每次直接讀值。直接讀值是指從記憶體重新裝載内容,而不是直接從寄存器拷貝内容。
volatile應用比較多的場合,在中斷服務程式和cpu相關寄存器的定義。
參看:C語言再學習 – 關鍵字volatile
參考:
- https://blog.csdn.net/qq_29350001/article/details/54668893
- https://www.jianshu.com/p/1598004e8215