詳解C語言中的Static關鍵字

一、static關鍵字的基本含義

首先,static關鍵字的意思是靜態的,用於修飾局部變量,全局變量和函數,修改其數據儲存類型

1.局部變量:在任意一個函數內部定義的變量(不加static),初始值不確定,出函數自動銷毀,存放於棧區。 使用static修飾這個變量時,編譯器會把她初始化為零,存儲於靜態區,函數返回時值保持不變,出函數不銷毀,下一次進入函數依然存在。根本原因——static修飾的局部變量存儲在靜態區。

2.全局變量 :普通全局變量定義在函數體外部,在靜態區分配存儲空間,編譯器自動對其初始化。普通全局變量對整個工程可見,其他文件使用關鍵字extern外部聲明後可以直接使用。 靜態全局變量僅對當前文件可見,其他文件不可訪問,其他文件可以定義與其同名的變量,兩者互不影響。 在定義不需要與其他文件共享的全局變量時,加上static關鍵字能夠有效地降低程序模塊之間的耦合,避免不同文件同名變量的沖突,且不會誤使用。

3.函數:在函數的返回類型前加上static,就是靜態函數。例如:static int main() 靜態函數隻能在聲明它的文件可見,其他文件不能引用該函數。不同文件可以使用相同名字靜態函數 非靜態函數可以在另一個文件直接引用。

二、static關鍵字的用法

1.當使用普通局部變量時,如圖,int a是一個局部變量,每次出函數後自動銷毀,所以打印出"6666666666";

當使用靜態局部變量時,如圖。static修飾的局部變量除瞭局部范圍後不會銷毀,下一次進入函數依然存在。

2.如圖 ,static聲名的函數不能被另一個文件引用

三、static關鍵字的原理

因為static修飾的局部變量是存儲在靜態區的,static修飾全局變量時,實際改變的是變量的存儲位置。 局部變量放在棧區的,被static修飾後放在瞭靜態區。從而導致除瞭作用域依然存在,生命周期並沒有結束

如圖為存儲區示意圖

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: