c語言static變量存儲在哪裡?C語言提供了static關鍵字來修飾變量的定義,static關鍵字修飾的變量稱為:靜态變量;該關鍵字修飾變量的定義格式如下:,今天小編就來聊一聊關于c語言static變量存儲在哪裡?接下來我們就一起去研究一下吧!
C語言提供了static關鍵字來修飾變量的定義,static關鍵字修飾的變量稱為:靜态變量;該關鍵字修飾變量的定義格式如下:
static 數據類型名 變量名;
所以,在定義變量的時候,在數據類型名之前添加static關鍵字,定義的變量就是靜态變量。那麼,可以包括“靜态局部變量”和“靜态全局變量”。我們先來總結一下靜态局部變量和靜态全局變量的特點,然後,再編寫測試例子證明。總結如下:
(1) 靜态局部變量,其作用域與局部變量一樣;就是在定義變量的代碼塊内;生命期與全局變量一樣,是整個程序運行期間。
而且,靜态局部變量隻初始化一次,初始化第一次之後,第二次再遇到該局部變量的定義時,就不會重新定義。
(2) 靜态全局變量,其生命周期與全局變量一樣,就是在整個程序的運行期間;作用域則被限制為在定義該靜态全局變量的源文件内。例如在test.c源文件中定義了靜态全局變量,那麼,靜态全局變量就隻能夠在test.c源文件中使用。
(3) 靜态局部變量和靜态全局變量,它們的初始值都默認設置為0值。
下面我們舉例說明靜态局部變量的使用,程序測試例子如下:
程序運行結果如下:
可以看到,第一次調用func函數的時候,進入func函數體,定義靜态局部變量a,然後,給靜态局部變量a賦值,并累加變量的值。使用靜态局部變量a的值為15數值。
那麼,第二次調用func函數的時候,再次進入func函數,此時,遇到靜态局部變量a的定義語句,那麼,由于靜态局部變量a已經定義過了,所以,不再執行靜态局部變量a的定義語句,所以,略過執行靜态局部變量a的定義語句。接着對靜态局部變量a累加,使變量a的值為25數值。
當第三次調用func函數的時候,與第二次調用func函數一樣,由于靜态局部變量a已經定義了,所以,不再執行靜态局部變量a的定義語句。接着就對靜态局部變量a累加,使變量a的值為35數值。
通過這個測試例子,可以看出,靜态局部變量的定義語句隻執行一次,所以,定義靜态局部變量時候的初始化值也隻執行一次。
對于靜态全局變量,就是其“作用域”隻局限于定義該全局靜态變量的源文件内,無法通過extern關鍵字,在其他源文件中使用靜态全局變量。首先,我們新建一個test.c源文件,在該源文件中定義一個全局變量:
然後,在新建test1.c源文件,在該文件中,通過關鍵字引用全局變量。test1.c源文件的代碼如下:
程序的運行結果如下:
可以看到,對于test.c源文件中定義的全局變量value,可以在test1.c源文件中,通過extern關鍵字,聲明value關鍵字是在其他模塊中定義的變量。那麼,在test1.c源文件中就可使用value變量。
此時,我們把test.c源文件中定義的全局變量,使用static關鍵字修飾,定義為靜态全局變量,如下:
然後,重新編譯程序,編譯結果如下:
可以看到,編譯提示錯誤!test1.c源文件中使用的value變量是沒有定義。因為test.c中定義的value變量是靜态全局變量,所以,靜态全局變量的作用域隻局限于定義該變量的test.c源文件中,那麼,在test1.c源文件就無法使用test.c源文件定義的靜态全局變量。
由于靜态全局變量的作用域隻限定在定義變量的源文件内,所以,不同的源文件中,可以定義同名的靜态全局變量。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!