回覆列表
-
1 # 影片好笑
-
2 # 使用者8107137581681
最主要有兩點用途。
讓一個變數長期有效,而不管其是在什麼地方被申明。比如:
int fun1()
{
static int s_value = 0;
....
}
那麼fun1不管在什麼地方被呼叫,當函式退出後,s_value最後的值將一直會被系統儲存(相當於一個全域性變數),下次s_value再被用到時,也即當fun1()再次被呼叫時,s_value初始值將是最近被儲存過的值(請注意s_value初始化操作只會被執行一次,即上述s_value =0 這個語句)。
2.避免多個檔案使用了相同的變數名而導致衝突
比如有多個檔案,分別由幾個人獨立開發的。假定他們在各自的檔案中定義相同的“全域性”變數名(僅僅指在他們獨自的檔案中全域性),當系統整合時,由於他們使用了名字一樣的“全域性”變數,導致有難於遇見的問題。解決這個問題方便的做法就是在各自檔案中,在相同的全域性變數申明前加上static修飾符。這樣系統就會為他們分配不同的記憶體,互不影響了。
static int a = 0; // 執行期時初始化一次, 下次再呼叫時, 不進行初始化工作如下:printf(“%d”,a);a++;}int main(){staticLocalVar(); // 第一次呼叫, 輸出a=0staticLocalVar(); // 第二次呼叫, 記憶了第一次退出時的值, 輸出a=1return 0;}擴充套件資料1、static對全域性變數的修飾,可以認為是限制了只能是本檔案引用此變數。有的程式是由好多.c檔案構成。彼此可以互相引用變數,但加入static修飾之後,只能被本檔案中函式引用此變數。2、static對棧變數的修飾,可以認為棧變數的生命週期延長到程式執行結束時。一般來說,棧變數的生命週期由OS管理,在退棧的過程中,棧變數的生命也就結束。3、但加入static修飾之後,變數已經不再儲存在棧中,而是和全域性變數一起儲存。同時,離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。