1. 程式人生 > >C語言 靜態變數static的用法

C語言 靜態變數static的用法

static有兩個作用

第一個作用: 修飾變數,變數又分為區域性和全域性變數,但他們都存在記憶體的靜態區

              靜態全域性變數,作用於僅限於變數被定義的檔案。其他檔案即使用extern宣告也沒法使用,準確說就是作用域是從定義處開始,到檔案結束,

                       在定義處之前的那些程式碼不能使用它。

              靜態區域性變數,在函式裡定義,就只能在這個函式裡使用,同一個文件中的其他函式也是用不了的。由於被static修飾的變數總是存在記憶體的

                      靜態區。所以即使這個函式執行結束,這個靜態變數的值不會被銷燬,函式下次使用時仍能使用。

第二個作用:修飾函式

              函式前加static使得成為靜態函式,但此處的“static”的含義不是指儲存,而是隻對對函式的作用域僅限於本檔案(所以有內部函式)              關鍵字static有著不尋常的歷史,起初在C中表示退出一個塊後仍然存在的區域性變數,之後在C中又有了第二種含義:用來表示被其他
                        檔案訪問的全域性變數和函式。
  1. <prename="code"class="html">//關鍵字static的用法  
  2. #include<stdio.h>
  3. #include<
    stdlib.h>
  4. static int n;//定義的靜態全域性變數      
  5. int   fun1()  
  6. {  
  7.    static int m=0;//靜態區域性變數  
  8.    m++;  
  9.    return m;  
  10. }  
  11. int  fun2()  
  12. {  
  13.         n=0;  
  14.     n++;  
  15.     return n;  
  16. }  
  17. int main()  
  18. {  
  19.     int i;  
  20.     for(i=0;i<10;i++)  
  21.     {  
  22.        fun1();//m為靜態區域性變數   這個函式執行結束,這個靜態變數的值不會被銷燬,函式下次使用時仍能使用。  
  23.        fun2();//n 靜態全域性變數 作用於僅限於變數被定義的檔案。  
  24.     }  
  25.     printf("m = %d\n",fun1());  
  26.     printf("n = %d\n",fun2());  
  27. system("pause");  
  28. return 0;  
  29. }  

輸出結果: