static關鍵字用的很多,但是還是不太懂,每次都要查資料。用的時候也是稀里糊塗的,只知道static是靜態的,用的最多的也就是靜態變數,靜態函式基本是瞎用或者不用。用靜態變數時,只考慮了靜態變數只初始化一次的好處,沒有分析過和全域性變數有什麼區別,今天做個總結,加深一下理解。
分為三個作用點,如下:
借用網上的一張圖來看下。extern 全域性變數宣告,不是用來定義變數的。
static 修飾定義的。
全域性變數作用域為整個程式,生命週期為整個程式執行期新增static修飾詞後,全域性變數或者函式的作用域就修改了,作用域變小了,生命週期還是不變的。
這樣就起到了隱藏函式或者當前檔案變數的功能,放置其他檔案呼叫。說個不負責的比喻就相當於c++中的private修飾詞。
儲存在靜態資料區的變數會在程式剛開始執行時就完成初始化,也是唯一的一次初始化。可能沒有感覺看下面**:void init()
stat = 1;
printf("***************init***************====\n");
return;
}int main()
如果執行上面**你會發現「***************init***************====」只會列印一次,說明初始化stat=0只執行了一次。共有兩種變數儲存在靜態儲存區:全域性變數和 static 變數,只不過和全域性變數比起來,static 可以控制變數的可見範圍,說到底 static 還是用來隱藏的。
其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區。在靜態資料區,記憶體中所有的位元組預設值都是0x00,某些時候這一特點可以減少程式設計師的工作量。1、什麼時候用全域性變數什麼時候用static修飾變數1、嚴格來說基本上不要使用全域性變數,增加**的閱讀難度,除錯難度。能用區域性變數解決就用區域性變數。
2、要保留值時,可以使用static修飾變數。區域性變數也可以新增static來保留值,這樣的好處是作用域只是{}範圍內
3、沒有被本檔案以外用到的全域性變數和函式,應該都加上static隱藏起來。
4、被其他檔案使用到時,則可以用全域性變數。
static關鍵字總結
static變數 區域性變數 改變了變數的儲存方式 生命週期 使它儲存於靜態區中,在編譯期間就分配記憶體,在整個程式執行期間一直存在。但是變數的作用域保持不變。全域性變數 改變了變數的鏈結屬性,即變數只在本檔案中有效。static函式 改變了函式的連線屬性,即函式只在本檔案內部有效,其他檔案不可見。...
static關鍵字總結
當同時編譯多個檔案時,加上static關鍵字的全域性變數和函式具有隱藏作用,而所有未加static關鍵字的全域性變數和函式具有全域性可見性 舉例來說,同時編譯兩個原始檔,檔案 如下 a.c 如下 include char a a void message b.c 如下 include int mai...
this關鍵字 static關鍵字
1.當成員變數和區域性變數重名,可以用關鍵字this來區分 this 代表物件,代表那個物件呢?當前物件 this就是所在函式所屬物件的引用 簡單說 那個物件呼叫了this所在的函式,this就代表哪個物件 this也可以用於在建構函式中呼叫其他建構函式 注意 只能定義在建構函式的第一行,因為初始化...