static ---最名不副實的關鍵字
目錄
1.static修飾全域變數
2.static修飾函式
3.static修飾區域變數
static的作用:
1.static修飾全域變數
我們創建兩個源檔案,一個test.c,一個main.c

現在我們在test.c檔案下定義一個全域變數
int g_val = 100;
我們在main.c下進行呼叫列印g_val我們能訪問到g_val嗎?
答案是可以的

如果給g_val加上static修飾我們還能再main.c下訪問到嗎?
static int g_val = 100;
這時候答案是不行的!

因此我們得到了static的第一個結論
結論1:static修飾全域變數,該變數只在本檔案內被訪問,不能在其他檔案被直接訪問,
2.static修飾函式
我們在test.c檔案下寫一個show()函式,請問在main.c檔案能呼叫嗎?


答案是可以的,

那這時候給show()函式加上static,main.c下還能呼叫該函式嗎?


答案是不可以的!因此我們可以得到第二個結論
結論2:static修飾函式,該函式只能在本檔案內被訪問,不能被其他檔案訪問,但是可以通過嵌套的方式呼叫,變相的封裝的表現,
但是我們可以通過函式嵌套呼叫的方式呼叫show函式,
什么意思呢?就是在show函式的相同檔案內創建一個新的函式,呼叫show函式,我們再在main.c檔案下呼叫這個新的函式,已達到呼叫show()函式的目的,
例:我們創建一個show_helper函式,來呼叫static修飾的show函式,我們再在main.c檔案內呼叫show_helper函式,


結果:

通過嵌套的方式呼叫,變相的封裝的表現,
因此static專案維護,可以提供安全保護,被static修飾,主要限制的是作用域,
3.static修飾區域變數
void fun()
{
int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}
你知道這段代碼,它的運行結果是什么嗎?

通過結果我們發現他列印了10個1,其中,i是區域變數,具有臨時性,函式呼叫時開辟空間并初始化,函式結束釋放空間,
那么如果我們static修飾區域變數,即給int i = 0;前static所修飾,結果還會一樣嗎?
void fun()
{
static int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}
答案當然是不一樣的, 我們發現,結果變成了1-10,因此我們可以得到第三個結論,

分析:


結論3:static修飾區域變數,更改該區域變數的生命周期,
生命周期:將臨時變數的生命周期變成全域變數的生命周期,
作用域不變:作用域仍然是代碼塊內,
總結:
static:
結論1:static修飾全域變數,該變數只在本檔案內被訪問,不能在其他檔案被直接訪問,
結論2:static修飾函式,該函式只能在本檔案內被訪問,不能被其他檔案訪問,但是可以通過嵌套的方式呼叫,變相的封裝的表現,
結論3:static修飾區域變數,更改該區域變數的生命周期,
生命周期:將臨時變數的生命周期 -- 全域變數的生命周期,
作用域不變:作用域仍然是在本代碼塊內,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413386.html
標籤:java
上一篇:Java資料結構-認識順序表
下一篇:Java資料結構-了解復雜度
