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

2022-03-05 05:46:21 字數 5436 閱讀 4886

1樓:雲南新華電腦學校

全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。

這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。

static全域性變數與普通的全域性變數有什麼區別:static全域性變數只初使化一次,防止在其他檔案單元中被引用;

static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;

static函式與普通函式有什麼區別:static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝。

2樓:析素

全域性變數是指在整個程式的作用域範圍之內都可以使用的變數,而靜態全域性變數仍然是一個全域性變數,但是它的值可以在多程式環境中保持不變。在絕大多數情況下全域性變數和靜態全域性變數的差別並不大,但在多執行緒的情況下,全域性靜態變數和全域性變數會有較大區別。

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

3樓:

全域性變數與全域性靜態變數的區別:

1.若程式由一個原始檔構成時,全域性變數與全域性靜態變數沒有區別。

2.若程式由多個原始檔構成時,全域性變數與全域性靜態變數不同:全域性靜態變數使得該變數成為定義該變數的原始檔所獨享,即:全域性靜態變數對組成該程式的其它原始檔是無效的。

全域性變數:是程式設計術語中的一種,源自於變數之分。變數分為區域性與全域性,區域性變數又可稱之為內部變數。

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

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

靜態全域性變數的作用:

1.不必擔心其它原始檔使用相同變數名,彼此相互獨立。

2.在某原始檔中定義的靜態全域性變數不能被其他原始檔使用或修改。

4樓:詬湊謨琅

全域性變數是不顯式用static修飾的全域性變數,但全域性變數預設是動態的,作用域是整個工程,在一個檔案內定義的全域性變數,在另一個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數。全域性靜態變數是顯式用static修飾的全域性變數,作用域是宣告此變數所在的檔案,其他的檔案即使用extern宣告也不能使用。

全域性變數也稱為外部變數,它是在 函式外部定義的變數。 它不屬於哪一個 函式,它屬於一個源程式檔案。其作用域是從定義該變數的位置開始至原始檔結束。

全域性變數是在所有函式體的外部定義的,程式的所在部分(甚至其它檔案中的**)都可以使用。全域性變數不受作用域的影響(也就是說,全域性變數的生命期一直到程式的結束)。如果在一個檔案中使用 extern關鍵字來宣告另一個檔案中存在的全域性變數,那麼這個檔案可以使用這個資料。

在全域性變數前加一個 static,使該變數只在這個原始檔中可用,稱之為全域性靜態變數,全域性靜態變數就是靜態全域性變數。

在多檔案組成的程式裡,全域性變數與全域性靜態變數是不同的。在某一層次宣告的變數的作用域就終止於該變數所在層次的末尾。唯一的區別是全域性靜態變數使得該變數成為定義該變數的原始檔所獨享。

如果在一個檔案中使用 extern關鍵字來宣告另一個檔案中存在的靜態全域性變數,這個檔案也不能夠使用這個資料。

5樓:匿名使用者

樓上說的很好,但是我再補充點,就我個人理解:

全域性變數其實也是**,所以他是儲存在pe檔案的**段中的,而靜態變數是儲存在資料段中的。

6樓:alison劉淑婷

在全域性變數前加一個static,使該變數只在這個原始檔中可用,稱之為全域性靜態變數,全域性靜態變數就是靜態全域性變數。

1.全域性變數也稱為外部變數,它是在函式外部定義的變數。 它不屬於哪一個函式,它屬於一個源程式檔案。其作用域是從定義該變數的位置開始至原始檔結束。

2.全域性變數是在所有函式體的外部定義的,程式的所在部分(甚至其它檔案中的**)都可以使用。全域性變數不受作用域的影響(也就是說,全域性變數的生命期一直到程式的結束)。

如果在一個檔案中使用extern關鍵字來宣告另一個檔案中存在的全域性變數,那麼這個檔案可以使用這個資料。

3.在全域性變數前加一個static,使該變數只在這個原始檔中可用,稱之為全域性靜態變數,全域性靜態變數就是靜態全域性變數。

全域性變數和靜態變數,試說明兩者有何異同.

7樓:倒黴熊

全域性變數、靜態全域性變數和靜態區域性變數都存放在記憶體的靜態儲存區域 這兩者在儲存方式上並無不同。

這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式, 當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用, 因此可以避免在其它原始檔中引起錯誤。

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

8樓:匿名使用者

static 資料型別用來給變數建立永久儲存空間.靜態變數在函式間呼叫時保持他們的值不變.當用在一個類中時,所有要用到靜態變數的時候這個類將把這個變數映象過去.

9樓:

全域性變數和靜態全域性變數的區別在於作用域不同就是說一個專案裡如果有多個源程式檔案

非靜態全域性變數可以在所有原始檔裡呼叫

靜態全域性變數只能在本檔案裡呼叫,不允許在其他檔案裡呼叫//file1.cpp

static int a;//只能在file1.cpp裡使用int b; //可以在file2.cpp裡使用extern int c; //file2.

cpp裡的cint main(void)

//file2.cpp

static int a;//只能在file2.cpp裡使用int c; //可以在file1.cpp裡使用extern int b; //file1.

cpp裡的bint fun(void)

在多檔案的專案開發中這樣可以避免由於變數重名造成的衝突

10樓:匿名使用者

全域性變數前面有沒有static表明該變數是否具有外部連結,1-3樓說的很清楚了

tatng803397說的情況是類,結構或者函式內部的static變數

11樓:

靜態全域性變數只能在它被宣告的檔案中使用,不能跨檔案引用

請問c++語言裡靜態變數和全域性變數有什麼區別?謝謝

12樓:

1. 全域性變數的作用域是整個專案,它只需要在一個原始檔中定義就可以作用於所有的原始檔,其它不包括全域性變數定義的檔案需要用extern關鍵字再次宣告這個全域性變數。

2. 全域性變數、靜態全域性變數、靜態區域性變數都是在靜態儲存區(全域性資料區)中分配空間的,而區域性變數是在棧上分配空間的。

3. 全域性變數、靜態變數的生命期和程式生命期是一樣的,在程式結束之後作業系統會**空間。

4. 全域性變數和靜態變數都是儲存在靜態儲存區中,生命期和程式一樣,但是不同的是全域性變數的作用域是整個專案,而靜態全域性變數是當前程式檔案,靜態區域性變數則是當前函式體內。

全域性變數和靜態全域性變數、靜態區域性變數預設值都是0,也就是在沒有初始化變數值的時候預設為0。

5. 靜態變數包含靜態區域性變數和靜態全域性變數。

靜態區域性變數具有區域性作用域只對定義自己的函式可見,只被初始化一次,自從初始化一次之後直到程式執行期間一直都在。

靜態全域性變數具有全域性作用域作用於定義它的程式檔案但是不能作用於專案裡的其它檔案,這一點和全域性變數不同。靜態全域性變數可以被多次初始化。

6. 把區域性變數改變為靜態變數之後是改變了它的儲存方式和生命期。

把全域性變數改變為靜態變數之後是改變了它的作用域,限制了使用範圍

7. 看以下幾個例子

//測試靜態區域性變數

int fun(void)

for(int i = 0; i < 10; i++)

/*輸出結果是

1 2 3 4 5 6 7 8 9 10

*//*解釋如下

1. 靜態區域性變數只會被初始化一次,因此第一次呼叫fun函式的時候num被初始化為0

2. 然後每次呼叫的時候++num,第一次呼叫++num為1;第二次++num為2......

3. 靜態區域性變數的生命期是整個程式因此值可以儲存下來*/

//宣告一個靜態全部變數

static int value;

//測試靜態全域性變數

void g(void)

for(int i = 0; i < 10; i++)

/*輸出1 1 1 1 1 1 1 1 1 1

解釋1. 靜態全域性變數可以被初始化多次,因為每次呼叫g函式都會對靜態全域性變數初始化為0

2. 每次value的值都初始化為0,++value為1,因此輸出的值為1

*///測試靜態區域性變數

int get(int x)

printf("%d %d\n", get(4), get(5));

/*輸出9 10

解釋:1.printf是一個函式,根據函式引數入棧的順序是從右到左,則先呼叫get(5)再呼叫get(4)

2.呼叫get(5)的時候,count第一次被初始化為5,則返回10;第二次呼叫get(4)的時候count不再被初始化值為5返回9*/

13樓:

全域性變數宣告之前加上static,就是靜態全域性變數。全域性變數和靜態全域性變數都是靜態儲存的;在儲存上無區別。區別在於他們的作用域;全域性變數的作用域是整個源程式,當源程式有多個原始檔組成時,全域性變數在各個源程式檔案都是有效的;而靜態全域性變數怎被限制了作用域,只在定義該變數的原始檔內有用在同一程式的其他原始檔不能使用!

還有靜態全域性變數只初始化一次,防止在其他原始檔呼叫!而全域性變數可以再其他原始檔初始化!!

這樣說樓主明白了嗎?

14樓:匿名使用者

建議去看看這篇文章

看完就可以明白了

c++ 全域性變數和全域性靜態變數有什麼區別呢?

15樓:匿名使用者

c++ 全域性變數和全域性靜態變數的根本區別還是作用域的區別。

1、全域性變數是不顯示用static修飾的全域性變數,但全域性變數預設是靜態的,作用域是整個工程,在一個檔案內定義的全域性變數,在另一個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數;

2、全域性靜態變數是顯示用static修飾的全域性變數,作用域是所在的檔案,其他的檔案即使用extern宣告也不能使用。

python全域性變數python全域性變數

你直接定義的localvar是個全域性變數 而test 這個函式中會定義 或重繫結 全域性變數localvar為6。可以這樣理解 函式是一個盒子,所有函式體裡定義的變數都只能在盒子裡存在。但是global關鍵字讓函式可以定義能拿到盒子外的變數 所以,如果變數名字相同,後來的賦值操作就會覆蓋之前的值,...

靜態區域性變數和普通全域性變數以及靜態全域性變數的區別

靜態區域性變數和普通全域性變數以及靜態全集變數在編譯時,編譯器會自動給他回們分配地址。而且是從答mcu上電執行開始,一直駐留,不會被 的。而真正的區別在於他們的作用域。靜態區域性變數的作用域是在於定義它的那個函式內。由於其在編譯時編譯器就給他們分配了地址,並且做了初始化,所以它只能被初始化一次,而且...

全域性變數無法賦值

num3只是形參,只是在函式呼叫中讀取了全域性變數l的值,其是一個獨立的變數,有著獨立的儲存單元。num3的改變和 l 是沒有什麼關係的 請好好看看形參和實參的那一節 num3只是形參,只是在函式呼叫中讀取了全域性變數l的值,其是一個獨立的變數,有著獨立的儲存單元。num3的改變和 l 是沒有什麼關...