C中:函數
1. static修飾函數中的變量(棧變量):改變變量的生存期,做用域不變仍爲所在函數。 只被初始化一次。spa
2. static修飾全局變量:限制全局變量只能被模塊內訪問,不能夠在別的模塊中用extern聲明調用。code
3. static修飾函數:做用與修飾全局變量相似,也是限制該函數只能在模塊內訪問,不能再別的模塊中用extern聲明調用。對象
例如:blog
文件a.c static int i; //只在a文件中用 int j; //在工程裏用 static void init() //只在a文件中用 { } void callme() //在工程中用 { static int sum; } 上面的全局i變量和init()函數只能用在a.c文件中,全局變量sum的做用域只在callme裏。變量j和函數callme()的全侷限擴充到整個工程文件。因此能夠在下面的b.c中用extern關鍵字調用。extern告訴編譯器這個變量或者函數在其餘文件裏已經被定義了。i和init()函數就不能在b.c中extern再調用。 文件b.c extern int j; //調用a文件裏的 extern void callme(); //調用a文件裏的 int main() { ... }
C++中:內存
1. static靜態數據成員屬於整個類全部,類的全部對象共同維護。作用域
2. static靜態函數成員也屬於整個類,通常用於調用靜態數據成員,不能直接訪問非static成員(要指定類才行)。編譯器
class Point { public: .... static void show() { cout << count <<endl;} private: ... static int count; //這裏只聲明,沒有分配內存,沒有初始化。 } int Point::count = 0; // 這裏初始化靜態變量 int main() { Point a(4,5); Point::show(); //也能夠a.show(); }