1. 程式人生 > >【C#】全域性變數、全域性靜態變數、區域性變數、區域性靜態變數的區別

【C#】全域性變數、全域性靜態變數、區域性變數、區域性靜態變數的區別

C#中變數分為:全域性變數、靜態全域性變數、區域性變數和靜態區域性變數

1、按儲存區域分

       (1)全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域;

       (2)區域性變數存放在記憶體的棧區。

 2、按作用域分        (1)全域性變數在整個工程檔案內都有效;        (2)靜態全域性變數只在定義它的檔案內有效;        (3)靜態區域性變數只在定義它的函式內有效,並且程式僅分配一次記憶體,函式返回後,該變數不會消失;        (4)區域性變數在定義它的函式內有效,但是函式返回後失效。

       以上是對於他們巨集觀上的區分,接下來具體的區分他們之間的關係:

1、全域性變數和靜態全域性變數的區別——作用域

這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。可以說靜態全域性變數比全域性變數的限制更大一點。

  2、區域性變數和靜態區域性變數的區別——生存期

       靜態區域性變數只在它定義的函式內有效,並且程式僅分配一次記憶體,函式返回後,該變數不會消失。雖然離開定義它的函式後不能使用,但如再次呼叫該函式,靜態區域性變數還可以繼續使用,而且儲存了前次呼叫後保留下來的值。        區域性變數也僅僅在它定義的函式內部有效,但是呼叫函式結束後,返回時失效。

       3、靜態區域性變數和全域性變數的區別

       上面對於靜態區域性變數已經介紹過了,它的作用域定義在函式內,離開了函式就不能用了。而全域性變數定義後所有的函式都可以使用。前者是隻能用於一個函式,而後者卻可以應用於所有的函式。