c語言關鍵字 static

2022-09-12 18:24:11 字數 1876 閱讀 6639

一、static關鍵字三個作用

定義全域性靜態變數,定義區域性靜態變數,定義靜態函式

二、c語言中static作用

在修身變數的時候,static修飾的靜態區域性變數只執行一次,而且延長了區域性變數的生命週期直至程式執行結束才釋放。乙個被宣告為靜態的變數在這一函式被呼叫的過程中維持其值不變

在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所有函式訪問,但不能被模組外其他函式呼叫,他是乙個本地的全域性變數。。另一種說法即:static修飾的全域性變數,這個全域性變數只能在本檔案中被訪問,不能在其他檔案中訪問,即便是使用extern外部宣告也不可以

static修飾乙個函式,則這個函式只能在本檔案中呼叫,不能被其他檔案呼叫,static修飾的區域性變數存放在全域性靜態儲存區。

(1):不想被釋放的時候可以用static修飾。比如修飾函式中存放在棧空間的陣列,如果不想讓這個陣列在函式呼叫結束釋放則可以使用static修飾。

(2):考慮到資料本地化與**範圍的好處時可以使用static。當想要使用全域性變數的時候應該優先考慮使用static.

三、static修飾全域性變數與普通全域性變數區別,static修飾區域性變數與普通區域性變數區別,static修飾函式與普通函式區別、

全域性變數加上static就成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,所以兩者在儲存方式上沒有區別。static全域性變數只初始化一次。兩者的區別在於,非靜態全域性變數的作用域是整個原始檔,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域即只在定義該檔案的原檔案中有效,在同一程式的其他原始檔下則不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其他的原始檔中引起錯誤。

把全域性變數改變為靜態的全域性變數後儲存方式沒變但改變了它的作用域,限制了他的使用範圍。

2.區域性變數加static後就變成了靜態的區域性變數,static區域性變數只被初始化一次,在兩次函式呼叫時,第二次呼叫進入時仍保持第一次呼叫時退出的值。下一次仍然是上次的結果值,即被宣告為靜態的區域性變數在這一函式被呼叫的過程中維持其值不變。在函式呼叫結束後變數不會被銷毀,直到程式執行結束static變數才會被**。所以把區域性變數改變為靜態的區域性變數後改變了它的儲存方式,即改變了它的生存期。

把區域性變數改為靜態的區域性變數後儲存方式改變了,生存期延長了。普通的區域性變數的儲存空間都分配在棧區,每次被函式呼叫時分配的空間可能都不一樣,而static區域性變數具有全域性唯一的特點,每次被呼叫時都指向同一記憶體,因此值在函式中不變,變數一直到程式結束才被**

1.初始化與賦值的區別:

初始化:變數定義的同時給其乙個值。

賦值:變數已經存在再給其乙個值。

3.函式加上static後,static函式的作用域僅限在本檔案,不能被其他檔案呼叫。這個函式被限制在宣告它的模組的本地範圍內使用。而且static函式在記憶體中只有乙份,普通函式在每個被呼叫中維持乙份複製品。

四、static函式例項

1 #include 2

void

test()38

intmain()915

return0;

16 }

執行結果為:1111111111

#includevoid

test()

intmain()

}執行結果為:

12345678910

C語言關鍵字Static

c語言中static的語義 1.static變數 1 區域性 a.靜態區域性變數在函式內定義,生存期為整個源程式,但作用域與自動變數相同,只能在定義該變數的函式內使用。退出該函式後,儘管該變數還繼續存在,但不能使用它。b.對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變...

c語言static關鍵字

以前一直覺得static關鍵字僅僅是定義乙個靜態的變數,今天在看書的時候發現一切沒那麼簡單,遂決定記錄下來。1.static關鍵字指明變數是乙個靜態變數,即static修飾的區域性變數並不是分配在棧中,而是分配在程式的靜態區中,所以在函式呼叫後其記憶體並不會被釋放。這裡需要注意乙個點,也就是說並不是...

C語言 關鍵字static

一 修飾區域性變數 靜態區域性變數 修飾前 include void test intmain return0 修飾後 include void test intmain return0 結論 static修飾區域性變數改變了變數的生命週期,讓靜態區域性變數出了作用域依然存在,到程式結束,生命週期才...