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

時間 2022-02-04 07:25:09

1樓:匿名使用者

舉個生動的例子 全域性變數就像你們這棟樓

樓道裡的垃圾桶

外部變數相當於其他樓裡的垃圾桶

全域性變數的作用域是當前整個檔案

其他檔案要使用它,應該用extern來宣告它此時對於要用它的檔案來說, 它就變成了外部變數了。

2樓:大大的

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

其作用域是整個源程式。在函式中使用全域性變數,一般應作全域性變數說明。 只有在函式內經過說明的全域性變數才能使用。

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

在此作用域內,全域性變數可為各個函式所引用。編譯時將外部變數分配在靜態儲存區。 有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。

也可用static宣告外部變數,使該變數不能被其他檔案引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

3樓:

全域性變數的作用域是當前整個檔案

其他檔案要使用它,應該用extern來宣告它

就變成了外部變數了。

4樓:

在c語言中,全域性變數的有效區域是本程式檔案中定義語句之後的所有函式。

外部變數是指定該變數已經在另乙個程式檔案中定義。

c語言可以在編譯連線生成可執行程式時,將多個程式檔案生成乙個可執行檔案。

5樓:一口沒水的枯井

1 全域性變數和外部變數是同乙個概念

2 從定義來解釋

根據作用域的不同,變數分為全域性變數和區域性變數,全域性變數又叫外部變數,區域性變數又叫內部變數。

譚浩強的《c程式設計(第三版)》p185頁有以下定義在函式內定義是變數是區域性變數;

在函式外定義的變數是外部變數;

6樓:

全域性變數在整個c檔案中都能使用,而區域性變數在其作用域內才能使用,舉個例子

int f = 7; // 這個是全域性變數int myadd(int a, int b)int main(void)

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

7樓:匿名使用者

外部變數也是全域性變數,被定義成外部變數是指這個變數沒有在當前**中,而是在另乙個**或二進位制檔案中。比如我在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的變數,並不在函式中

8樓:但莉

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

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

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

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

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

c語言全域性變數與區域性變數的區別有哪些

9樓:錢葛臧雪卉

全域性變數是使用相同的記憶體塊在整個類中儲存乙個值.

全域性變數的存在主要有以下一些原因:

1,使用全域性變數會占用更多的記憶體(因為其生命期長),不過在計算機配置很高的今天,這個不成為什麼問題,除非使用的是巨大物件的全域性變數,能避免就一定要避免。

2,使用全域性變數程式執行時速度更快一些(因為記憶體不需要再分配),同樣現在也快不了多少。

3,對於區域性變數的名字空間汙染,這個在不使用太多變數時是可以避免的。

總之,全域性變數可以使用,但是全域性變數使用時應注意的是盡可能使期名字易於理解,而且不能太短,避免名字空間的汙染;避免使用巨大物件的全域性變數。

區域性變數:在程式中,只在特定的過程或函式中可以訪問的變數,是相對與全域性變數而言的。

全域性變數也稱為外部變數,是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。

區域性變數可以和全域性變數重名,但是區域性變數會遮蔽全域性變數。在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。

c語言中 全域性變數與區域性變數在記憶體中的區別

10樓:

看了樓上的回答,雖然能完全解釋這個問題.

但是我不能完全同意其說法.

cpu 記憶體 等硬體高度發展的今天,這些已經不是我們所必需要考慮的因素.

註明: 如下內容,並非針對本題(記憶體區別),只是根據我的經驗說幾句.

其實,除了連線資料庫的相關配置等以外的東西的,我不太推薦使用全域性變數.因為,在乙個大程式執行時,別說乙個變數,就算是子程式與子程式不停地切換也是非常正確的事.如果使用太多的全域性變數,對安全非常不利.

所以應該盡可能使用區域性變數,不但要使用,還要細分成多個層次,比如,函式內部的,為最低層,那麼,函式外面的,為第二層,再往上走,....(略去一些),程式與程式之間的通訊,為處三層,...(略去一些),再往上走,出了整個程式的,為最高層,也就是全域性變數.

僅為個人看法和經驗之談,有興趣的朋友,可以跟我交流.

不感興趣的朋友請飄過,別罵我.因為罵我也沒用.呵呵....

11樓:衡嶽蒼蒼

全域性變數是使用相同的記憶體塊在整個類中儲存乙個值.

全域性變數的存在主要有以下一些原因:

1,使用全域性變數會占用更多的記憶體(因為其生命期長),不過在計算機配置很高的今天,這個不成為什麼問題,除非使用的是巨大物件的全域性變數,能避免就一定要避免。

2,使用全域性變數程式執行時速度更快一些(因為記憶體不需要再分配),同樣現在也快不了多少。

3,對於區域性變數的名字空間汙染,這個在不使用太多變數時是可以避免的。

總之,全域性變數可以使用,但是全域性變數使用時應注意的是盡可能使期名字易於理解,而且不能太短,避免名字空間的汙染;避免使用巨大物件的全域性變數。

區域性變數:在程式中,只在特定的過程或函式中可以訪問的變數,是相對與全域性變數而言的。

全域性變數也稱為外部變數,是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。

區域性變數可以和全域性變數重名,但是區域性變數會遮蔽全域性變數。在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。

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

12樓:大大的

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

其作用域是整個源程式。在函式中使用全域性變數,一般應作全域性變數說明。 只有在函式內經過說明的全域性變數才能使用。

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

在此作用域內,全域性變數可為各個函式所引用。編譯時將外部變數分配在靜態儲存區。 有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。

也可用static宣告外部變數,使該變數不能被其他檔案引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

13樓:三號學生

全域性變數也稱為外部變數,它是在函式外部定義的變數。

作用域不是整個源程式,是從定義處開始到程式結束。在函式中使用全域性變數,一般應作全域性變數說明。 只有在函式內經過說明的全域性變數才能使用。

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

在此作用域內,全域性變數可為各個函式所引用。編譯時將外部變數分配在靜態儲存區。 有時需要在其他檔案中使用extern來宣告外部變數,以擴充套件外部變數的作用域。

也可用static宣告外部變數,使該變數不能被其他檔案引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

c語言中的全域性變數和區域性變數分別是指什麼?

14樓:徒步一光年

根據使用範圍來區分的。

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;

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

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

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

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

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

外部變數也是全域性變數,被定義成外部變數是指這個變數沒有在當前 中,而是在另乙個 或二進位制檔案中。比如我在a.c中定義了變數myvar,還有乙個檔案b.c,它要用a.c中的myvar,這就要讓b.c知道myvar怎麼定義的,有兩種方法,一種是include a.c,但一般不這麼做 還有一種方法是在...

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

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

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

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