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...