C語言靜態區域性變數和全域性變數有什麼區別,不都是在整個程式中都

2021-06-30 01:17:41 字數 1934 閱讀 6281

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 使用方式不同 通過宣告後全域性變數程式的各...