1樓:匿名使用者
全域性變數與區域性變數的區別在於作用域的不同,且存在時間也可能不同。不管有不有外部的變數,main函式中的變數都不能稱為全域性變數。
全域性變數是可以被本程式所有物件或函式引用。
例如:圖中的**,t1為全域性變數,可以在main函式中使用,也可以在a函式中使用。
而t2 t3則為區域性變數,它們只能在花括號內部被使用。
所以a函式不能使用t2,main函式也不能使用t3。
拓展資料:全域性變數和區域性變數在記憶體上的不同:
局變數儲存在記憶體的全域性儲存區中,佔用靜態的儲存單元;區域性變數儲存在棧中,只有在所在函式被呼叫時才動態地為變數分配儲存單元。
2樓:
全域性變數和區域性變數的區別如下:
1. 作用域不同:全域性變數的作用域為整個程式,而區域性變數的作用域為當前函式或迴圈等
2. 記憶體儲存方式不同:全域性變數儲存在全域性資料區中,區域性變數儲存在棧區
3. 生命期不同:全域性變數的生命期和主程式一樣,隨程式的銷燬而銷燬,區域性變數在函式內部或迴圈內部,隨函式的退出或迴圈退出就不存在了
4. 使用方式不同:全域性變數在宣告後程式的各個部分都可以用到,但是區域性變數只能在區域性使用。函式內部會優先使用區域性變數再使用全域性變數。
3樓:匿名使用者
一、有效範圍不一樣
區域性變數只在本函式範圍有效,在此函式以外是不能使用這些變數;
全域性變數的有效範圍是從定義變數的位置開始到本原始檔結束。
二、記憶體空間不同
區域性變數是程式執行到該函式時給該變數分配記憶體空間,函式結束則釋放該記憶體空間;
全域性變數是程式執行時事先分配記憶體空間,當程式結束時釋放記憶體。
三、使用區間不同
全域性變數:作用於整個c程式檔案;
區域性變數:作用於所屬語句塊或函式中。
擴充套件資料全域性變數是程式設計術語中的一種,源自於變數之分。
變數分為區域性與全域性,區域性變數又可稱之為內部變數。由某物件或某個函式所建立的變數通常都是區域性變數,只能被內部引用,而無法被其它物件或函式引用。
全域性變數既可以是某物件函式建立,也可以是在本程式任何地方建立。全域性變數是可以被本程式所有物件或函式引用。
參考資料
4樓:靠名真tm難起
區別:區域性變數:“在函式內定義的變數”,即在一個函式內部定義的變數,只在本函式範圍內有效。
全域性變數:“在函式外定義的變數”,即從定義變數的位置到本原始檔結束都有效。
當有外部變數時,main函式中的同名變數就是全域性變數。如果沒有外部變數,main函式裡的變數依然是區域性變數。
目的:增加函式間資料聯絡的渠道。由於同一檔案中的所有函式都能引用全域性變數的值,因此如果在一個函式中改變了全域性變數的值,就能影響到其他函式中全域性變數的值,相當於各個函式之間有直接的傳遞渠道。
5樓:匿名使用者
全域性變數是自變數會影響因變數,而區域性變數只是影響部分因變數。
6樓:風鈴
最佳回答有錯誤。extern是宣告。宣告和定義都分不清就不要誤導別人了!
問題其實很簡單,函式{}裡的是區域性變數,反之是全域性變數,和extern無關。
7樓:田水冬
都有外部變數是變數和區域性變數是有區別的l
8樓:匿名使用者
我認為只要是extern定義的變數都是全域性變數,還有只要是在main函式外的就是全域性變數,不加extern的在main函式裡面得就是區域性變數!
全域性變數是指在整個程式中都可用,而區域性變數只是在定義他的那個{}裡可用!出了那個{}他就沒意義了!
你這個程式是函式的引數呼叫!程式的意思是:定義了兩個全域性變數(個人認為這裡定義成區域性變數也沒什麼)並比較這兩個變數中最大的值。這裡是呼叫了一個使用者自定義函式來比較的!
區域性變數和全域性變數的區別是什麼?
9樓:
全域性變數和區域性變數的區別如下:
1. 作用域不同:全域性變數的作用域為整個程式,而區域性變數的作用域為當前函式或迴圈等
2. 記憶體儲存方式不同:全域性變數儲存在全域性資料區中,區域性變數儲存在棧區
3. 生命期不同:全域性變數的生命期和主程式一樣,隨程式的銷燬而銷燬,區域性變數在函式內部或迴圈內部,隨函式的退出或迴圈退出就不存在了
4. 使用方式不同:全域性變數在宣告後程式的各個部分都可以用到,但是區域性變數只能在區域性使用。函式內部會優先使用區域性變數再使用全域性變數。
10樓:小秀才與小兵兵
具體來說,全域性變數和區域性變數的區別如下:
1. 作用域不同:全域性變數的作用域為整個程式,而區域性變數的作用域為當前函式或迴圈等
2. 記憶體儲存方式不同:全域性變數儲存在全域性資料區中,區域性變數儲存在棧區
3. 生命期不同:全域性變數的生命期和主程式一樣,隨程式的銷燬而銷燬,區域性變數在函式內部或迴圈內部,隨函式的退出或迴圈退出就不存在了
4. 使用方式不同:全域性變數在宣告後程式的各個部分都可以用到,但是區域性變數只能在區域性使用。函式內部會優先使用區域性變數再使用全域性變數
全域性變數、靜態全域性變數、靜態區域性變數和區域性變數的區別
11樓:匿名使用者
c++變數根據定義位置的不同,具有不同的作用域,作用域可分為6種:全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。
從作用域看:
全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字再次宣告這個全域性變數。
靜態區域性變數具有區域性作用域。它只被初始化一次,自從第一次初始化直到程式與你新內閣結束都一直存在,他和全域性變數的區別在於全域性變數對所有的函式都是可見的,而靜態區域性變數只對定義自己的函式體始終可見。
區域性變數也只有區域性作用域,他是自動物件,他在程式執行期間不是一直存在,而是隻在函式執行期間存在,函式的一次呼叫結束後,變數就被撤銷,其所佔用的記憶體也被收回。
靜態全域性變數也具有全域性作用域,他與全域性變數的區別在於如果程式包含多個檔案的話,他作用於定義它的檔案裡,不能作用到其他檔案裡,即被static關鍵字修飾過的變數具有檔案作用域。這樣即使兩個不同的原始檔都定義了相同的靜態全域性變數,他們也是不同的變數。
從分配記憶體空間看:
全域性變數、靜態區域性變數、靜態全域性變數都在靜態儲存區分配空間,而區域性變數在棧分配空間。
全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上沒有什麼不同。區別在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。
而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其他原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其他原始檔中引起錯誤。
1、靜態變數會被放在程式的靜態資料儲存區裡,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是他與堆疊變數和堆變數的區別
2、變數用static告知編譯器,自己僅僅在變數的作用域範圍內可見。這一點是他與全域性變數的區別。
從以上分析可以看出,把區域性變數改變為靜態變數後是改變了他的儲存方式,即改變了他的生存期。把全域性變數改變為靜態變數後是改變了他的作用域,限制了他的使用範圍,因此static這個說明符在不同的地方起的作用是不同的。
tips:
1、若全域性變數僅在單個檔案中訪問,則可以講這個變數修改為靜態全域性變數。
2、若全域性變數僅在單個函式中使用,則可以將這個變數修改為該函式的靜態區域性變數。
3、全域性變數、靜態區域性變數、靜態全域性變數都存放在靜態資料儲存區。
4、函式中必須要使用static變數的情況:當某函式的返回值為指標型別時,則必須是static的區域性變數的地址作為返回值,若為auto型別,則返回為錯指標。
12樓:孫映寒厚周
區域性變數
與其它三個有本質區別。
區域性變數,定義在函式內,
作用域為定義位置,到所在大括號結束。
每次執行到定義語句的時候,系統為該變數分配記憶體,當作用域結束後,記憶體被釋放。
而另外三個,都是在系統執行時就分配記憶體,在執行過程中都不會釋放,直到程式結束。
也就是說,區域性變數和其它三個,最明顯的區別:
1生命週期不同
2分配時間不同
3分配位置不同。
而另外三個,在這幾項上是相同的,之間的區別在於作用域。
全域性變數
,作用域為整個專案,不管在哪個檔案中,只要宣告後都可以使用。
靜態全域性變數,作用域為定義改變數的所在檔案。
而靜態區域性變數,作用域與普通區域性變數一樣,都是定義位置到所在大括號結束。
13樓:麼光遠抄圖
變數可以分為:全域性變數、靜態全域性變數、靜態區域性變數和區域性變數。
按儲存區域分,全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域,區域性變數存放在記憶體的棧區。
按作用域分,全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。
全域性變數(外部變數)的說明之前再冠以static
就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,
靜態全域性變數當然也是靜態儲存方式。
這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,
當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。
而靜態全域性變數則限制了其作用域,
即只在定義該變數的原始檔內有效,
在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,
因此可以避免在其它原始檔中引起錯誤。
從以上分析可以看出,
把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,
限制了它的使用範圍。
static函式與普通函式作用域不同。僅在本檔案。只在當前原始檔中使用的函式應該說明為內部函式(static),內部函式應該在當前原始檔中說明和定義。
對於可在當前原始檔以外使用的函式,應該在一個標頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案
static全域性變數與普通的全域性變數有什麼區別:static全域性變數只初使化一次,防止在其他檔案單元中被引用;
static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;
static函式與普通函式有什麼區別:static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝
全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為0。區域性變數的值不可知。
全域性變數靜態全域性變數靜態區域性變數和區域性變數的區別
c 變數根據定義位置的不同,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。從作用域看 全域性變數具有全域性作用域。全域性變數只需在一個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字...
易語言中變數全域性變數區域性變數常量之間有什麼區別
全域性變數就是整個程式都可以用的,比如你在子程式.按鈕1 被單擊下 建了一個變數a,在按鈕1下可以呼叫 但是到了.子程式 編輯框1 內容被改變 這個子程式下如果輸入變數a也可以呼叫的 區域性變數就是隻有一個子程式下可以使用的變數 就比如說這個變數a在 子程式.按鈕1 被單擊下 建立了,在.子程式 編...
c語言中區域性變數和全域性變數都是儲存在什麼區
c語言中區域性變數存在棧裡,全域性變數存靜態儲存區。區域性變數在棧空間上分配,這個區域性變數所在的函式被多次呼叫時,每次呼叫這個區域性變數在棧上的位置都不一定相同。區域性變數也可以在堆上動態分配,但是記得使用完這個堆空間後要釋放之。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存...