1樓:
(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。
(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。
(3)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。
根據靜態區域性變數的特點, 可以看出它是一種生存期為整個原始檔的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。 因此,當多次呼叫一個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。
雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***(尤其是短名全域性變數的變數名汙染很嚴重),因此仍以採用區域性靜態變數為宜。
簡單的說靜態區域性變數與全域性變數最明顯的區別就在於:全域性變數在其定義後所有函式都能用,但是靜態區域性變數只能在一個函式裡面用。
2樓:醉棋
靜態區域性變數只能在定義該變數的函式內使用,全域性變數可以在任意函式內使用。
3樓:陸美富
首先要清楚「整個程式」這個概念。
一個程式由多個編譯單位組成。每個可進行單獨編譯的原始檔稱為「編譯單位」。
在同一編譯單位內用extern說明符來擴充套件全域性變數的作用域。
當用static說明符說明全域性變數時,此變數可稱作「靜態」全域性變數。靜態全域性變數只限於本編譯單位使用,不能被其它編譯單位所引用。
4樓:
按儲存區域分:全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區
按作用域分:全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。
全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。
**如下:
//test.cpp
#include
extern int a;//變數宣告,不是定義static int b=5;
void func1()
//main.cpp
int a;
int b=10;
void func2()
void func1();
void main()
輸出結果為52012
5樓:幽靈詛咒師
單就你這個問題,回答就一句話,作用域不一樣。
簡單例子:
靜態區域性變數:只有定義這個變數的當前cpp能找到他的定義,其他cpp哪怕extern這個變數,包含對標頭檔案,要用,編譯都會報錯找不到。(至於生命週期,好比a.
cpp裡main函式,b.cpp裡定義一個b類,類裡面一個函式裡static int i(預設為0),並列印,賦另外一個值2,再列印,a.cpp裡呼叫b類裡這個函式兩次,第一次列印0,2;第二次列印2,2,就是說明這個變數在程式沒關的時候,哪怕出了b.
cpp,static int i的靜態區域性變數的值還在(但是你就是沒法直接在a.cpp裡extern來用這個i,要想這麼幹,請用全域性變數))
ps:靜態區域性變數和靜態全域性變數也差不多這意思,作用域,前者定義他的大括號裡可用,後者定義它的cpp檔案裡隨便用。靜態就是指作用域只在定義它的範圍(區域性or全域性)
全域性變數:同一個程式,其他cpp裡面只要extern這個變數,就能找到這個變數,且只要加好鎖,這個程式沒關掉,這個變數的數值就有確實含義(沒被delete)
6樓:小飛花兒的憂傷
作用域不同;編譯時期不同
靜態區域性變數和普通全域性變數以及靜態全域性變數的區別
靜態區域性變數和普通全域性變數以及靜態全集變數在編譯時,編譯器會自動給他回們分配地址。而且是從答mcu上電執行開始,一直駐留,不會被 的。而真正的區別在於他們的作用域。靜態區域性變數的作用域是在於定義它的那個函式內。由於其在編譯時編譯器就給他們分配了地址,並且做了初始化,所以它只能被初始化一次,而且...
全域性變數和靜態全域性變數的區別,靜態全域性變數和全域性變數有什麼區別
全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有...
全域性變數和區域性變數有什麼區別?是怎麼實現的
1 全域性變數的作用用這個程式塊,而區域性變數作用於當前函式 2 前者在記憶體中分配在全域性資料區,後者分配在棧區 3 生命週期不同 全域性變數隨主程式建立和建立,隨主程式銷燬而銷燬,區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在 4 使用方式不同 通過宣告後全域性變數程式的各...