歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++中的static關鍵字

C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用於普通變量和函數,不涉及類;後者主要說明static在類中的作用。

一、面向過程設計中的static

1、靜態全局變量

在全局變量前,加上關鍵字static,該變量就被定義成為一個靜態全局變量。我們先舉一個靜態全局變量的例子,如下:

  1. include<iostream>   
  2. using namespace std;  
  3.   
  4. static int n;  //定義靜態全局變量   
  5.   
  6. void fn()  
  7. {  
  8.     n++;  
  9.     cout<<n<<endl;  
  10. }  
  11.   
  12. int main(void)  
  13. {  
  14.     n = 20;  
  15.     cout<<n<<endl;  
  16.     fn();  
  17.     return 0;  
  18. }  

靜態全局變量有以下特點:

  • 該變量在全局數據區分配內存;
  • 未經初始化的靜態全局變量會被程序自動初始化為0(自動變量的值是隨機的,除非它被顯式初始化);
  • 靜態全局變量在聲明它的整個文件都是可見的,而在文件之外是不可見的; 

靜態變量都在全局數據區分配內存,包括後面將要提到的靜態局部變量。對於一個完整的程序,在內存中的分布情況如下圖:
代碼區 全局數據區 堆區 棧區

一般程序的由new產生的動態數據存放在堆區,函數內部的自動變量存放在棧區。自動變量一般會隨著函數的退出而釋放空間,靜態數據(即使是函數內部的靜態局部變量)也存放在全局數據區。全局數據區的數據並不會因為函數的退出而釋放空間。細心的讀者可能會發現,Example 1中的代碼中將

static int n;  //定義靜態全局變量  

改為

int n;  //定義全局變量  

程序照樣正常運行。
Copyright © Linux教程網 All Rights Reserved