c語言中,全域性變數和外部變數有什麼區別

時間 2021-08-30 10:26:31

1樓:匿名使用者

外部變數也是全域性變數,被定義成外部變數是指這個變數沒有在當前**中,而是在另乙個**或二進位制檔案中。比如我在a.c中定義了變數myvar,還有乙個檔案b.

c,它要用a.c中的myvar,這就要讓b.c知道myvar怎麼定義的,有兩種方法,一種是include a.

c,但一般不這麼做;還有一種方法是在b.c中也定義myvar,這個定義和a.c中一樣,但是外部的(extern)。

其實大部分時候是在a.h中宣告(declare)extern myvar,然後在a.c中定義(define)myvar。

b.c要用時include a.h就可以了

外部變數是全域性變數,它沒在當前的**中定義

全域性變數為非static的變數,並不在函式中

2樓:但莉

全域性變數也稱為外部變數,它是在函式外部定義的變數。 它不屬於哪乙個函式,它屬於乙個源程式檔案。其作用域是整個源程式。

在函式中使用全域性變數,一般應作全域性變數說明。 只有在函式內經過說明的全域性變數才能使用。全域性變數的說明符為extern。

但在乙個函式之前定義的全域性變數,在該函式內使用可不再加以說明。外部變數是在函式外部定義的全域性變數,它的作用域是從變數的定義處開始,到本程式檔案的結尾。在此作用域內,全域性變數可為各個函式所引用。

編譯時將外部變數分配在靜態儲存區。 有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。 也可用static宣告外部變數,使該變數不能被其他檔案引用。

有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

c語言,全域性變數和區域性變數有什麼區別

3樓:徒步一光年

根據使用範圍來區分的。

1。區域性變數

他是 指在函式內部定義的變數 作用域為定義區域性變數的函式 也就是說他只能在定義他的函式中使用

最值得注意的是 只有在程式執行到定義他的模組時才能生成,一旦執行退出該模組則起變數消失

eg.func ()

2。全域性變數

在程式執行的過程中一直有效

eg.int x=1;

func ()

func1 ()

main ()

由此不難看出整型x的作用範圍

對於全域性變數 如果在定義的時候不做初始化 則系統將自動為起賦值 數值型為0

字元型為空'\0'

全域性變數的弊端 增加記憶體開銷 降低函式的通用性

定義全域性變數時 理想的位置是在檔案的開頭 當這些函式以及同乙個程式中的其他源程式檔案中的某些函式需要使用該全域性變數時 在函式內部對該變數使用extern 加以說明 說明他是外部的

(這裡還要做詳細的講解)

eg.main ()

int a=1,b=2;

int min (x,y)

int x,y;

我還要說明的是 對外部變數的說明和對全域性變數的定義不是一回事

對外部變數的說明 只是宣告該變數是在外部定義過的乙個全域性變數 在這裡引用 而對全域性變數的定義則是要對起分配儲存單元的

乙個全域性變數只能定義一次 可是卻可以多次引用

*** 在同一原始檔中,全域性變數和區域性變數同名時,在區域性變數的作用域內,全域性變數不起作用的。

4樓:歸書蘭滑多

全域性變數是整個應用程式中任何方法都可以呼叫,而區域性變數則只針對宣告的那個方法可以使用。

5樓:於興昌邵夫

全域性變數在整個範圍函式都是用,而區域性變數只在規定的區域內適用,並且當在乙個函式中全域性變數和區域性變數同時出現時候,這個時候全域性變數的作用失效

6樓:愛巨集壯簡墨

全域性變數在其定義後所有函式都能用區域性變數只能在乙個函式裡面用

7樓:喻世英翠果

1)區域性變數只在本函式範圍有效,在此函式以外是不能使用這些變數;全域性變數的有效範圍是從定義變數的位置開始到本原始檔結束。

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

8樓:斂綠柳戎希

顧名思義,全域性變數是在整個程式都可以呼叫的的變數,而區域性變數只能在宣告的函式裡呼叫,他們之間的區別就是以上適用範圍的不同,這個很好理解!

9樓:弘瓊英學楚

全域性變數:作用於整個c程式檔案區域性變數:作用於所屬語句塊或函式中

10樓:夏致萱查琦

全域性變數在整個程式中都能用區域性變數是定義在哪個裡面哪個裡面就可以用,其他不可以用

11樓:豐琳瑜

全域性變數就是整個源程式都有效的變數;而區域性變數會在其所屬的函式或迴圈等結束後消亡。整個程式都要用的變數定義全域性變數,如果就是某個函式用的話,就定義區域性變數,以便其他函式可以重新定義同名變數來使用。 要是都用全域性變數,那遇到大程式時,程式是由不同人分別編各自的模組或函式,不能避免定義同名變數,到時就會衝突。

12樓:

全域性變數是在乙個函式中都有意義的變數,區域性變數是在乙個迴圈中有意義的變數。

#include

void main()

print("%d",sum);}

13樓:

a=1 b=2是全域性變數,這點沒錯

因為在main函式中,呼叫了fun2();,在函式fun2中,把全域性變數賦與了新值,a=4和b=9,那麼全域性變數ab就變為了這個新的數值,在輸出的時候就輸出它們的新值。

全域性變數的含義簡單來說就是全部函式可以使用它或全域性可以使用,而不是你理解的它的數值是不可改變的。除非你用const來修飾這個變數,即全域性變數const int a=1;,這個a就是不可變的,如果在函式中改變a的值,編譯都不能通過。

理解了嗎望採納。

14樓:普天行樂

我作個比喻,乙個大的正方形為全域性,大正方形內部有個小正形為區域性。有個變數為x在大正方形內,在小正方形之外。有個變數y在小正形之內。變數x可以在任何地方被使用包括在小正方形內

而y變數的使用範圍僅在小正方形之內。不知這樣解釋你理解不?

15樓:匿名使用者

具體來說,全域性變數和區域性變數的區別如下:

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

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

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

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

16樓:

作用域不同(根據名字就可看出)。

儲存的位置不同,全域性變數一般在靜態儲存區;而區域性變數則一般在棧區。

宣告的位置不同,全域性變數在函式外,而區域性變數在函式體內部。

全域性變數,系統會自動為其初始化;區域性變數則不會。

c語言靜態區域性變數和全域性變數有什麼區別,不都是在整個程式中都有效嗎。希望能舉個簡單的例子,謝謝啦

17樓:

(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。

(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

(3)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。

根據靜態區域性變數的特點, 可以看出它是一種生存期為整個原始檔的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。 因此,當多次呼叫乙個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。

雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的***(尤其是短名全域性變數的變數名汙染很嚴重),因此仍以採用區域性靜態變數為宜。

簡單的說靜態區域性變數與全域性變數最明顯的區別就在於:全域性變數在其定義後所有函式都能用,但是靜態區域性變數只能在乙個函式裡面用。

18樓:醉棋

靜態區域性變數只能在定義該變數的函式內使用,全域性變數可以在任意函式內使用。

19樓:陸美富

首先要清楚「整個程式」這個概念。

乙個程式由多個編譯單位組成。每個可進行單獨編譯的原始檔稱為「編譯單位」。

在同一編譯單位內用extern說明符來擴充套件全域性變數的作用域。

當用static說明符說明全域性變數時,此變數可稱作「靜態」全域性變數。靜態全域性變數只限於本編譯單位使用,不能被其它編譯單位所引用。

20樓:

按儲存區域分:全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區

按作用域分:全域性變數在整個工程檔案內都有效;靜態全域性變數只在定義它的檔案內有效;靜態區域性變數只在定義它的函式內有效,只是程式僅分配一次記憶體,函式返回後,該變數不會消失;區域性變數在定義它的函式內有效,但是函式返回後失效。

全域性變數和靜態變數如果沒有手工初始化,則由編譯器初始化為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

21樓:幽靈詛咒師

單就你這個問題,回答就一句話,作用域不一樣。

簡單例子:

靜態區域性變數:只有定義這個變數的當前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)

C語言中,全域性變數和外部變數有什麼區別

舉個生動的例子 全域性變數就像你們這棟樓 樓道裡的垃圾桶 外部變數相當於其他樓裡的垃圾桶 全域性變數的作用域是當前整個檔案 其他檔案要使用它,應該用extern來宣告它此時對於要用它的檔案來說,它就變成了外部變數了。全域性變數也稱為外部變數,它是在函式外部定義的變數。它不屬於哪乙個函式,它屬於乙個源...

c 全域性變數的問題,C 如何宣告全域性變數

定義應該放在。cpp檔案中。標頭檔案中是。extern 宣告,不是定義。定義放在標頭檔案,那包含此標頭檔案的。cpp都定義了此變數了,還不是多重定義嘛。你將你定義的全域性變數改為靜態的試試。應該是變數的鏈結性問題!如何在c 中設定全域性變數?1 首先,定義乙個實現加法運算自定義函式。2 接著,定義乙...

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

全域性變數的作用域是到應用程式結束 區域性變數的作用域是程式或函式執行結束 靜態變數是用static 將區域性變數的值保留下來,知道應用程式結束為止。只要在宣告變數的開始用static命令,變數就會自動變成靜態變數 全域性變數 靜態全域性變數 靜態區域性變數和區域性變數的區別 c 變數根據定義位置的...