什麼是靜態變數靜態變數全域性變數動態變數局

時間 2021-09-08 04:26:35

1樓:中目黒雨椋

非也。動態區域性變數:靜態區域性變數在靜態儲存區內分配儲存單元。

在程式整個執行期間都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,儲存在動態儲存區空間(而不是靜態儲存區空間),函式呼叫結束後即釋放。

靜態區域性變數:靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。

靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

動態全域性變數:全域性作用域,整個程式都可以使用。

靜態全域性變數:靜態全域性變數也具有全域性作用域,它與全域性變數的區別在於如果程式包含多個檔案的話,它作用於定義它的檔案裡,不能作用到其它檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。

2樓:別跟我講冷笑話

簡單來說,靜態變數就是一個變數名稱前有static標註的比如說 static int a;

全域性變數等於靜態變數,他們的差別你可以簡單理解成在作用域上的差別,靜態變數是在一個函式中的作用域(主函式就是主函式作用域,區域性函式就是區域性函式的作用域),而全域性函式是寫在主函式外的(非區域性函式中)空白處的變數,其生命期在主函式之前即產生,隨著主函式執行完資料再有系統**

而動態變數與靜態變數的差別是

例如void a()

void b()

動態變數就是,每一次呼叫完系統**記憶體,下一次呼叫再分配記憶體,而靜態變數的生命期會在主函式執行結束後記憶體才會被系統收回

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

3樓:陝西it優就業

1.從作用域看:

c++變數根據定義的位置的不同的生命週期,具有不同的作用域,作用域可分為6種:

全域性作用域,區域性作用域,語句作用域,類作用域,名稱空間作用域和檔案作用域。

1>全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。

2>靜態區域性變數具有區域性作用域,它只被初始化一次,自從第一次被初始化直到程式執行結束都一直存在,它和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。

3>區域性變數也只有區域性作用域,它是自動物件(auto),它在程式執行期間不是一直存在,而是隻在函式執行期間存在,函式的一次呼叫執行結束後,變數被撤銷,其所佔用的記憶體也被收回。

4>靜態全域性變數也具有全域性作用域,它與全域性變數的區別在於如果程式包含多個檔案的話,它作用於定義它的檔案裡,不能作用到其它檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同名字的靜態全域性變數,它們也是不同的變數。

2.從分配記憶體空間看:

1>全域性變數,靜態區域性變數,靜態全域性變數都在靜態儲存區分配空間,而區域性變數在棧裡分配空間

2>全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。

而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

1)全域性變數、靜態全域性變數以及靜態區域性變數都會被放在程式的靜態資料儲存區(全域性可見)中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它們與堆變數、堆變數的區別。

2)靜態變數(包括靜態區域性變數和靜態全域性變數)用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。

從以上分析可以看出,把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。因此static這個說明符在不同的地方所起的作用是不同的。

應予以注意。

tips:

a.若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;

b.若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;

c.設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題,因為他們都放在靜態資料儲存區,全域性可見;

d.如果我們需要一個可重入的函式,那麼,我們一定要避免函式中使用static變數(這樣的函式被稱為:帶「內部儲存器」功能的的函式)

e.函式中必須要使用static變數情況:比如當某函式的返回值為指標型別時,則必須是static的區域性變數的地址作為返回值,若為auto型別,則返回為錯指標。

在C語言中關於全域性變數 靜態變數 的用法1 全域性變數與靜態變數的區別2 用static定義變數 常量以及定

1.1 某個檔案中的全域性變數是任何其他檔案都可見的,只要extern宣告一下,任何檔案均可使用 2 若在定義變數前加static,說明該變數只有該檔案內部可以使用,其他檔案無法使用。即static限定了變數的可見性,但生命週期仍是全域性的 2.static char a static const ...

靜態變數是什麼意思,java中靜態變數有什麼用途?

舉個例子,就是有兩個班級,a班級門上掛著班級裡學生的簡歷,b班級沒有,當你要上兩個班級裡找學生的時候,a班級你在門外就可以知道找誰了,b班級就必須上門裡邊找。學生簡歷就屬於 靜態變數,他可以通過類 班級 直接呼叫。在函式中,只有定義時才初始化,每次函式呼叫時保留有上次的值。使用上基本上和全域性變數差...

Visual C6 0定義全域性靜態變數

寫在用它的檔案的最前面吧 static int a 如果需要賦初始值則 static int a 123 如果不初始化 程式啟動會預設將之清0 include using namespace std int a 3,b 5 void main int a 8,b 10 其中int a 3,與b 5就...