C語言 static 關鍵字的常見用法有三種:
- 用于局部變量的修飾符;
- 用于全局變量的修飾符;
- 用于函數的修飾符。
1、用于局部變量的修飾符
當 static 用于修飾局部變量時,通常是在某個函數體內,只能在該函數內被調用。
這樣定義的變量通常被稱為局部靜態變量,它的值不會因為函數調用的結束而被清除,當函數再次被調用時,它的值是上一次調用結束后的值。
如下面這段代碼所示,變量 x 是局部變量,變量 y 是靜態局部變量。在調用函數后,變量 x 的值會被清除,而變量 y 的值則會被保留。多次調用該函數,變量 x 每次都會從新初始化,而變量 y 的值則不會。
靜態局部變量的特性:
- 存儲位置:處于靜態存儲區,當用 static 修飾局部變量的時候,它就改變了局部變量的存儲位置,從原來的棧中存放改為靜態存儲區;
- 初始化操作:未經初始化的局部靜態變量會被程序自動初始化為0(自動對象的值是任意的,除非他被顯示初始化);
- 作用域:為局部作用域,即當定義它的函數結束的時候,作用域隨之結束(不能被訪問)。但是靜態局部變量在離開作用域之后,并沒有被銷毀,而是仍然保存在內存當中,直到程序結束。
2、用于全局變量的修飾符
關鍵字 static 還可用于修飾全局變量,該變量在某一個文件中變量,但不屬于任何一個函數內,這樣的變量通常稱為靜態全局變量。
靜態全局變量的存儲位置、初始化操作同靜態局部變量的特性,但其作用域有所不同:靜態全局變量可以被該文件內的所有函數訪問,但不能被其它文件內的函數訪問。
3、用于函數的修飾符
關鍵字 static 還可以用于修飾一個函數,這樣的函數稱之為靜態函數。
定義一個靜態函數就是在函數的返回類型前加上 static 關鍵字。
靜態函數的作用域僅限于本文件,不能被其它文件調用。