c語言的static關鍵字有兩種用途:
1. 在函式內部使用,被static修飾變數的區域性變數,可從兩方面去理解:生命週期和可見性;
(1) 宣告週期:按理來說,區域性變數會隨著他所在的函式的執行完而銷毀,即區域性變數存在的必要條件是所處載體(函式)存在。
但是如果你用static修飾該區域性變數,你會發現其載體不存在了該變數還存在!這就是static的作用之一。
驗證:#include "stdafx.h"
#include "const.h"
void print(void)
void staticprint(void)
int _tmain(int argc, _tchar* argv)
printf("\n");
for(int i = 0; i < 10; i++)
return 0;
}列印結果為:
1,1,1,1,1,1,1,1,1,1,
1,2,3,4,5,6,7,8,9,10,
為什麼被static修飾的區域性變數(static int b)能在其載體函式銷毀後還能繼續存在?原來被static修飾的的變數被放在了全域性區(也稱靜態區),該區還是全域性變數的存放區,在生命週期上等同於全域性變數!該區的資料在程式剛開始執行時就被初始化,且唯一一次,程式結束之後才隨程式一同銷毀。所以,即使staticprint函式執行了10次,b還是第一次定義的那個變數!
(2) 變數的可見性:被static修飾的區域性變數雖然在程式的整個生命週期都是存在的,但是僅有其載體函式才能訪問。
總之,被static修飾的區域性變數在生命週期上等同於全域性變數,在可見性上依舊是區域性變數。
2. static修飾全域性變數或函式
當存在多個檔案時,所有沒被static修飾的全域性變數或是函式都是全域性可見的,例如:
在hello.c檔案中有
int xx = 10;
在main.c中
#include "stdafx.h"
int _tmain(int argc, _tchar* argv)
extern int xx;
int k = xx;
printf("k = %d ", k);
結果是:k =10
main.c 又沒有把宣告xx變數的檔案包含進來,它怎麼能訪問xx?原因就是上面所說的"沒被static修飾的全域性變數或是函式都是全域性可見"。既然如此,那如果我不想讓別人使用我定義的這個變數或是為了避免大家都不約而同的使用了該變數導致命名衝突,怎麼辦?很簡單,在該全域性變數的定義的時候載入static!
static關鍵字的作用詳解
平時工作中static關鍵字出現的地方挺多的,但是要我說出他們的用法跟區別我還真不知道怎麼說,這裡系統性的整理下。1 修飾函式的區域性變數 特點 有預設值0,只執行一次,執行一開始就開闢了記憶體,記憶體放在全域性 2 修飾全域性函式和全域性變數 特點 只能在本原始檔使用 3 修飾類裡面的成員變數 特...
關鍵字 static 詳解
c 的static有兩種用法 面向過程程式設計中的static和物件導向程式設計中的static。前者應用於普通變數和函式,不涉及類 後者主要說明static在類中的作用。一 面向過程設計中的static 1 靜態全域性變數 在全域性變數前,加上關鍵字static,該變數就被定義成為乙個靜態全域性變...
static關鍵字詳解
static關鍵字詳解 static修飾方法 叫做 靜態方法 static修飾的屬性 叫做靜態屬性 static屬於類,是公家的,它在靜態方法區中只有乙份,每個物件共享類中的static,執行緒會用到.我們可以通過類名呼叫static修飾的屬性或方法,也可以通過物件名呼叫,好處是不需要new出物件,...