全域性變數 與 static型的區域性變數 有什麼區別

2021-12-23 21:35:26 字數 3278 閱讀 9303

1樓:鷹弈

extern變數和static變數都是從靜態儲存區域分配記憶體,即他們的儲存方式都一樣

從靜態儲存區域分配記憶體的特點是,內存在程式編譯時就已經分配好,這塊內存在程式執行期間都存在,這也就導致了全域性變數和static變數的生命期存在於整個程式執行中(即程式開始執行到程式結束)

static變數分為兩種:

第一種:static區域性變數

在函式體內定義int i;和static int i;的區別

首先他兩都只在定義該變數的函式中有效

第乙個屬於非靜態區域性變數,他是從棧記憶體分配空間,其特點是從執行該函式開始,為i分配棧記憶體,函式結束執行後,i所分配的記憶體會被系統自動**(即這個處理後的i值就此消失),所以他的生命期只存在於該函式執行中。並且,如果不對該變數初始化i指向乙個任意值。

第二個屬於靜態區域性變數,如果不對i初始化,系統自動初始化為0,函式結束執行後,i依然存在,即i的值不會消失(因為分配給他的記憶體沒有被收回),比如:i被系統自動初始化為0,第一次呼叫該函式,i的初始值為0,執行函式中的語句後,i變為5,函式結束,第二次呼叫該函式時,此時i初始值為5,接著在執行其他語句,函式結束,以此類推。也就是說本次呼叫函式結束後的i值為下一次呼叫該函式i的初始值。

第二種:static全域性變數

他與非靜態全域性變數的區別是:作用域不同

乙個源程式由多個原始檔組成,非靜態的全域性變數在各個原始檔中都是有效的,而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效,在其他原始檔下不能使用他。 其他的都一樣。

以上主要讓樓主了解關鍵字static的作用

2樓:網工小菜鳥

全域性變數所有函式都可以使用,而static型的區域性變數雖然壽命和全域性變數相同,但是只能在函式的區域性環境中使用。

3樓:有錢買不起房子

#include

int gint1,gint2;//全域性變數int fun1()

int fun2()

void main()

輸出第一次:gint1=10,gint2=10第二次:gint1=20,gint2=10在函式定義變數,如果用static修飾時,函式每次執行,該變數不是按最開始初始化,而是保留上次數值的

全域性變數是一直貫穿整個程式的,直到程式執行完才被關閉而區域性變數當函式結束後,static修飾的變數繼續保留,只不過在函式其他地方不能引用的。

全域性變數和 區域性變數的區別?

4樓:匿名使用者

全域性變數與區域性變數的區別在於作用域的不同,且存在時間也可能不同。不管有不有外部的變數,main函式中的變數都不能稱為全域性變數。

全域性變數是可以被本程式所有物件或函式引用。

例如:圖中的**,t1為全域性變數,可以在main函式中使用,也可以在a函式中使用。

而t2 t3則為區域性變數,它們只能在花括號內部被使用。

所以a函式不能使用t2,main函式也不能使用t3。

拓展資料:全域性變數和區域性變數在記憶體上的不同:

局變數儲存在記憶體的全域性儲存區中,佔用靜態的儲存單元;區域性變數儲存在棧中,只有在所在函式被呼叫時才動態地為變數分配儲存單元。

5樓:

全域性變數和區域性變數的區別如下:

1. 作用域不同:全域性變數的作用域為整個程式,而區域性變數的作用域為當前函式或迴圈等

2. 記憶體儲存方式不同:全域性變數儲存在全域性資料區中,區域性變數儲存在棧區

3. 生命期不同:全域性變數的生命期和主程式一樣,隨程式的銷毀而銷毀,區域性變數在函式內部或迴圈內部,隨函式的退出或迴圈退出就不存在了

4. 使用方式不同:全域性變數在宣告後程式的各個部分都可以用到,但是區域性變數只能在區域性使用。函式內部會優先使用區域性變數再使用全域性變數。

6樓:匿名使用者

一、有效範圍不一樣

區域性變數只在本函式範圍有效,在此函式以外是不能使用這些變數;

全域性變數的有效範圍是從定義變數的位置開始到本原始檔結束。

二、記憶體空間不同

區域性變數是程式執行到該函式時給該變數分配記憶體空間,函式結束則釋放該記憶體空間;

全域性變數是程式執行時事先分配記憶體空間,當程式結束時釋放記憶體。

三、使用區間不同

全域性變數:作用於整個c程式檔案;

區域性變數:作用於所屬語句塊或函式中。

擴充套件資料全域性變數是程式設計術語中的一種,源自於變數之分。

變數分為區域性與全域性,區域性變數又可稱之為內部變數。由某物件或某個函式所建立的變數通常都是區域性變數,只能被內部引用,而無法被其它物件或函式引用。

全域性變數既可以是某物件函式建立,也可以是在本程式任何地方建立。全域性變數是可以被本程式所有物件或函式引用。

參考資料

7樓:靠名真tm難起

區別:區域性變數:「在函式內定義的變數」,即在乙個函式內部定義的變數,只在本函式範圍內有效。

全域性變數:「在函式外定義的變數」,即從定義變數的位置到本原始檔結束都有效。

當有外部變數時,main函式中的同名變數就是全域性變數。如果沒有外部變數,main函式裡的變數依然是區域性變數。

目的:增加函式間資料聯絡的渠道。由於同一檔案中的所有函式都能引用全域性變數的值,因此如果在乙個函式中改變了全域性變數的值,就能影響到其他函式中全域性變數的值,相當於各個函式之間有直接的傳遞渠道。

8樓:匿名使用者

全域性變數是自變數會影響因變數,而區域性變數只是影響部分因變數。

9樓:風鈴

最佳回答有錯誤。extern是宣告。宣告和定義都分不清就不要誤導別人了!

問題其實很簡單,函式{}裡的是區域性變數,反之是全域性變數,和extern無關。

10樓:田水冬

都有外部變數是變數和區域性變數是有區別的l

11樓:匿名使用者

我認為只要是extern定義的變數都是全域性變數,還有只要是在main函式外的就是全域性變數,不加extern的在main函式裡面得就是區域性變數!

全域性變數是指在整個程式中都可用,而區域性變數只是在定義他的那個{}裡可用!出了那個{}他就沒意義了!

你這個程式是函式的引數呼叫!程式的意思是:定義了兩個全域性變數(個人認為這裡定義成區域性變數也沒什麼)並比較這兩個變數中最大的值。這裡是呼叫了乙個使用者自定義函式來比較的!

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

一 用途不同 全域性變數 描述物件有什麼 在類中定義 類中所有方法都可以使用。區域性變數 臨時儲存資料 在類的方法中定義 只能在當前方法中使用。二 使用不同 全域性變數 整個類中可用 區域性變數 該方法內可用 三 初始值不同 全域性變數 有初始值 區域性變數 無初始值 擴充套件資料 使用全域性變數會...

JS區域性變數傳值給全域性變數,JS區域性變數傳值給全域性變數

不是空,是非同步啦,你同步就可以了啊,ajax可以設定的啊 可以抄參考看看吧 js 區域性變數傳值給全域性變數 200 在區域性使用 window.全域性變數名 值 直接更改和使用全域性變數 js中怎樣將區域性變數的值傳遞給全域性變數 直接將區域性變數的值賦給全域性變臉就行了 注意,全域性變數得先定...

js裡,區域性變數的值賦給全域性變數

直接在 abc這個函式裡面 abc document.getelementbyid name value就可以了啊 不能直接用abc去接value嗎?在javascript中怎樣把區域性變數的值賦給全域性變數 很簡單,如下 var global variable 全域性變數test fun aler...