C語言之旅(7)關鍵字static的作用

2021-08-10 14:17:52 字數 1033 閱讀 9135

首先在再說這個知識點之前,我先補充乙個知識點。那就是檔案作用域。

什麼是檔案作用域:簡而言之就是你宣告的變數或者函式只在本原始檔中可見。外部檔案是無法識別的。

static有三個重要的作用:1.宣告靜態全域性變數;2.宣告靜態區域性變數;3.宣告靜態函式。

static就是乙個檔案作用域的關鍵字。

1.靜態全域性變數:我們知道對於全域性變數個靜態變數儲存的地點都是全域性(靜態)區。但是全域性變數對於整個解決方案都是可見的,大家知道,在我門寫專案的時候不只是會建立乙個.c檔案,會建立很多.c檔案。然後在統一編譯鏈結生成最後的可執行檔案。打個比方就是你在1.c檔案中宣告乙個變數int a;那麼在2.c檔案(同乙個工程中)中也是可以使用的。但是如果這個變數前面加上了static,那麼這個變數對於除本原始檔之外的任何檔案都是隱藏的。所以即使你在別的檔案中再次定義乙個同樣名字的變數也是沒有關係的。因為那個static全域性變數已經心有所屬了。

我們知道不管是全域性變數也好還是靜態變數也好,他們的儲存區域都是全域性(靜態)區,在這個區域的變數會被初始化一次,而且初始化的數值是0。(如果沒有被使用者初始化的情況下,如果我們初始化的話,以我們初始化的為準)

2.靜態區域性變數:靜態區域性變數與普通的區域性變數的區別有三個:

(1).位置:靜態區域性變數的儲存位置是全域性(靜態)區,它的生命週期是整個程式的執行階段。

(2).訪問許可權:靜態區域性變數只能被它所從屬 的作用域訪問,也就是說它只對本作用域(例如函式內部)的變數和函式顯現,對於作用域外部的區域是隱藏的。

(3).值:對於數值的話,如果我們沒有初始化的話,編譯器會自動的初始化為0,即使他在函式中定義的話,即使我們以後再次呼叫這個函式,程式也不會走這個宣告初始化步驟,會直接跳過去,讀取的數值會是上次修改的數值,存在於整個程式的執行階段。

3.靜態函式:比如你的工程中有很多個原始檔,但是某乙個原始檔的函式你並不想別的原始檔訪問的話,這個時候你只需要你在這個函式的前面加乙個static即可,這個時候這個函式的作用域就是檔案作用域,除了你的本源件能訪問這個函式外,對於其餘的原始檔都是隱藏的。

如果感興趣的人可以自己做實驗,我就不舉例了。希望大家多多批評,共同進步。

c語言之const和static關鍵字

作用 被修飾的內容為靜態變數,編譯時即分配儲存空間,程式執行過程中不再分配。修飾變數 當我們在定義沒有關鍵字的區域性變數的時候,他在記憶體中儲存的方式是動態的,在每次到達定義變數的程式位置,則為其分配儲存空間,跳出 塊即結束其生命期。而使用static關鍵字修飾區域性變數,他在記憶體中靜態儲存,在編...

C語言之static關鍵字使用總結

static關鍵字總結 1 當它用於函式定義時,或用於 塊之外的變數宣告時,static關鍵字用於修改識別符號的鏈結屬性,從external改為internal,但識別符號的儲存型別和作用域不受影響。用這種方式宣告的函式或變數只能在宣告它們的原始檔中訪問 2 當它用於 塊內部的變數宣告時,stati...

C語言之關鍵字

基本資料型別 short int long float double char unsigned signed 8個 復合資料型別 struct union enum 3個 語句結構 if esle do while for switch case default break continue go...