概念(what)
static
作用域生命週期
函式(一直存在)
定義原始檔
一直存在
內部變數(呼叫完銷毀)
函式內
一直存在
外部變數(一直存在)
定義原始檔內
一直存在
目的(why)
l對於函式來講,只有乙個目的,就是限定作用域,禁止當前檔案外的檔案呼叫 l
對於內部變數,僅僅是為了該值能夠永久留存,而不至於函式沒有被銷毀。對於內部變數的初始化語句,可以理解為在函式之外,所以呼叫該函式的時候不執行,只有初始化的時候執行一遍 l
對於外部變數,僅僅是為了該變數作用於當前原始檔內,保持變數的私密性。
綜上,無論何時,
static
都只有乙個作用,就是彌補他所定義的函式或變數所不具有的作用域或生命週期之一的作用。因為這些變數或函式自身就隱含了生命週期的特性。內部變數隱含的特性是用完銷毀,那麼如果我想要打破隱含特性,不讓他銷毀,那我就必須對它加以處理,這個時候就加上static讓他始終存在,不去銷毀。而函式和外部變數的特性是無法加以控制,始終外部可見,那麼如果我不想讓別人看見我,就加上static,將自己隱藏起來,perfect!static
就是來彌補缺陷的!
應用(how)
假設要定義乙個變數a,那麼
第一,要存什麼資料,多少位夠存,確定u8或者u16。比如需要儲存eep的位址,而位址是10位的,那麼顯然,要定義乙個u16才能保證不溢位。
第二,這個資料都有誰要用。還以eep位址為例。我的位址其它模組訪問時可能要用,那麼該變數一定就是個外部變數。再或者將這個變數通過函式引數傳遞。那麼問題又來了,什麼時候用傳參的方式,什麼時候用全域性變數的方式呢。我的理解,如果外部更注重功能的應用,那麼就通過傳參的方式,如果外部只對該變數應用,則通過全域性變數。這樣分析,eep的位址還是應該通過全域性變數來實現。
在C語言中Static的用法
一 c程式儲存空間布局 c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化資料段 bss段 在程式中沒有初始化的全域性變數 核心將此段初始...
static在C語言中的使用
static在c語言中的用法主要是倆中 1.修飾區域性變數 static修飾區域性變數時存放在靜態儲存區,生命週期是整個程式生命週期。static在區域性變數使用時初次定義就要初始化,且只能初始化一次,如果不初始化就自動賦值為0。重複呼叫同一函式,第二次呼叫時不會執行static區域性變數初始化的那...
static在c語言中的用法
在c語言中 static用來修飾變數和函式 1.修飾區域性變數 靜態區域性變數 2.修飾全域性變數 靜態全域性變數 3.修飾函式 靜態函式 1 includevoid test int main return 0 2 includevoid test int main 對比 1和 2的效果理解sta...