static
static在c語言中可以修飾變數或者函式。總得來說,用static修飾的變數或是函式具有靜態的特性。
static修飾區域性變數
static修飾區域性變數的主要改變在於改變了區域性變數的生命週期。一般的區域性變數,生命週期都是在它的函式內,在函式結束的時候,就會釋放變數。再次進入函式時,會重新定義這些變數。當這些函式用static修飾的時候,會變成靜態變數。就是不會在函式結束時就釋放掉。當再次進入函式時,也不需要重新定義。對比下面的**。
void
print_1()
void
print_2()
intmain()
執行結果如下:
兩個函式的區別只有用static修飾了print_2()的變數。原因很顯然。因為函式在執行第一遍print_1()之後,這時變數a的生命週期結束了,所以在執行第二遍的時候,重新定義了a=10,所以兩遍print_1()結果都是a=20,其實無論執行幾遍print_1()結果都是不變的。但是在print_2()中,變數a用static修飾了,所以變成了乙個靜態變數,即當第一遍print_2()執行結束之後,變數a依然存在。所以當函式第二遍執行print_2()時,a其實沒有被重新定義,這時候a還是20,執行結果就變成了40。這就是static在修飾區域性變數時的效果。
static修飾全域性變數/函式
全域性變數其實也是靜態儲存方式,所以定義乙個全域性變數,也完全可以達到用static修飾區域性變數的作用的。但是全域性變數是可以被其他原始檔發現的。當乙個工程不止乙個.c檔案時,在a.c檔案中定義的全域性變數依然可以被在b.c中被訪問,這就是用static修飾全域性變數的意義。static可以隱藏全域性變數。即在a.c中定義的全域性變數用static修飾後,在b.c中是不能訪問這個變數的。這樣就可以避免在使用不同原始檔時產生的命名衝突。
用static修飾函式的時候,也是相同的作用。被static修飾的函式,不能被其他原始檔訪問。
這也是static最常使用的乙個特性——隱藏。
static變數初始化
被static修飾的變數會初始化為0,這是靜態儲存方式的特點,所以全域性變數也會自動初始化為0。這種特性會給敲**帶來一些便利。例如在使用矩陣或是陣列時。可以免去最開始的賦值工作。
C語言中的static關鍵詞
另一種是區域性變數,如在for迴圈中定義的變數,在函式中的變數,這樣的變數在 快執行時則有效,一旦執行完畢,則會立即被系統從記憶體中清理出去.1.函式內部 普通函式中的變數,隨函式的執行而存在,而在函式內部加上static修飾的變數,則隨函式的存在而存在,主要前面是執行,後面是函式的存在,當stat...
Oracle Inventory關鍵詞解釋
事務處理 transaction 是指物料移入庫存 在庫存內移動以及移出庫存.物料搬運單 move order 是在乙個組織內對物料進行移動的請求.保留 reservation 是 與需求 之間的關聯。保留將在 與需求 之間建立乙個永久的資料關聯,代表指定需求 的乙個可靠的物料分配。現有量 on h...
static 關鍵詞的使用
2.1 什麼叫函式重複定義 我們經常會遇到報錯,說變數或者函式重複定義。那麼,在此,首先我舉例說明一下什麼叫函式的重複定義。檔案 void test 檔案void test 那麼,在編譯的時候是不會報錯的,但是,在鏈結的時候,會出現報錯 multiple definition of test 因為在...