在 C/C++ 中,static 關鍵字使用恰當可以大大提升程序的模塊化特性。 static 在 C++ 類之中和在類以外的做用不同,在C語言中的做用和在 C++ 類以外的做用相同,下面一一說明:
局部變量便是在函數或一個代碼塊內部聲明的變量。模塊化
當局部變量被定義時,系統不會對其初始化; 做用域爲函數或一個代碼塊; 局部變量儲存在棧裏,離開做用域就會無效。
在局部變量前面加上關鍵字 static,該變量變爲靜態局部變量。函數
變量在定義時,必須初始化,若是沒有初始化,系統會自動對其初始化,如 int 型初始化爲 0; 儲存在全局變量區,一直存在直到程序運行結束。
靜態局部變量至關於一個全局變量!!!this
全局變量是在函數體外部聲明的變量。.net
在全局變量區分配存儲空間,且編譯器會自動對其初始化; 做用域爲整個程序,即包括所用的源文件和頭文件; 其餘文件可使用extern外部聲明後直接使用,其餘文件不能定義相同的變量。
一樣,在全局變量前面加上關鍵字 static,該變量變爲靜態全局變量。指針
只能在本文件中訪問,不能在其它文件中訪問,即使是extern外部聲明也不能夠; 做用域只在本文件; 其餘文件能夠定義與其同名的變量,二者互不影響。
函數就是完成特定任務的獨立程序代碼單元。
static 在函數的使用方法是在函數的返回類型前面加上 static。其做用與全局變量相似。code
靜態函數只在聲明它的文件中可見,其餘文件不能引用該函數; 其餘文件能夠定義與其同名的變量,二者互不影響;
一個類包含 數據成員 和 成員函數;對象
在數據成員前加上 static 關鍵字,聲明靜態數據成員。blog
靜態數據成員存儲在全局變量區,靜態數據成員在定義時分配存儲空間; 在使用以前必須初始化,它的初始化在main()以前; 靜態數據成員不屬於任何對象。即便不定義類的任何對象它們也存在,在整個程序中只有一個,並且全部對象均可以對它進行操做;
與靜態全局變量相比,靜態數據成員變量不與程序中的其餘全局變量衝突。作用域
在成員函數前加上 static 關鍵字,聲明靜態成員函數。其做用與靜態數據成員相似。get
靜態成員函數不屬於任何對象。調用時,它們無 this 指針,任何對象均可以調用; 靜態成員函數不能爲 virtual、const 或 volatile; 靜態成員函數的地址能夠存儲在常規的函數指針中,但不能存儲於成員函數指針中;
這是我寫的第一篇,有不少不足之處,但寫下去就必定有進步。
static這個關鍵字頗有用,能夠儘可能將只在本文件使用的全局變量和函數使用 static 關鍵字聲明,一樣,若是類中有一個數據成員對於全部對象來講,如球都是圓的等等,儘可能使用 static 聲明。