C/C++中的static用法總結

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();
}
相關文章
相關標籤/搜索