EasyC 全域性變數

2022-09-21 08:30:08 字數 1329 閱讀 2939

全域性變數:

前面聊到了靜態持續變數的鏈結性,其中鏈結性為外部的變數通常簡稱為外部變數。它們的儲存持續性為靜態,作用域為整個程式。外部變數是在函式外部定義的,因此對於所有的函式而言都是外部的。因此外部變數也被稱為全域性變程式設計客棧量。

關於外部變數,c++當中有乙個單定義規則:變數只能有一次定義。

這句話看起來有些難以理解,為了理解它,我們需要釐清c++當中的兩種變數宣告。一種是定義宣告簡稱為定義,它給變數分配儲存空間。另外一種是引用程式設計客棧宣告,簡稱為宣告,它不給變數分配儲存空間。因為它表示引用乙個已有的變數。

引用宣告使用關鍵字extern,並且不進行初始化。否則會被視為是定義,而非宣告。

double up;

extern int blue;

extern char ch = 'z';

上面的例子當中,第一行和第三行為定義宣告,因為第一行沒有加關鍵字extern,而第三行的變數進行了初始化。

可能到這裡還是有些難以理解,其實extern是為了引入其他檔案建立的變數。如果我們不加extern,表示在當前檔案當中建立乙個全域性變數,而加上了extern表示引入其他檔案建立的全域性變數。外部鏈結性的全域性變數雖然是整個程式都可使用的,但跨檔案使用時,需要手動使用extern宣告。

沒有通過extern宣告的其他檔案的全域性變數也是無法使用的。

當我們同時使用區域性變數和全域性變數的時候會發生什麼呢?比如下面這段**:

// file1

double warning = 3.0;

// file2

extern double warning;

void test()

在這段**當中, 我們在file1中建立了變數warning,在file2當中宣告了這個全域性變數。並且在test函式當中又定義了乙個新的double型別的變數也叫做warning,那麼問題來了,當我們使用cout輸出的時候,究竟得到的結果會是什麼呢?

答案很簡單,得到的結果是5.0。因為當同時使用同名的區域性變數和全域性變數時,區域性變數將隱藏全域性變數。

那麼全域性變數和區域性變數究竟應該使用哪一種呢?

很明顯,全域性變數非常方便,使用全域性變數可以免去很多引數傳遞的過程,大大簡化了編碼的難度。但如果是在大型的工程式設計客棧程當中,使用全域性變數則是乙個非常危險的行為。因為全域性變數人人都能訪問,我們很難保證資料的準確性,會不會遭遇不可知的更改,排查的時候也更加困難。而使用區域性變數,引數傳遞的鏈路是清晰的,debug的時候會容易許多。

在我們日常的演算法聯絡當中,並不存在數程式設計客棧據不可靠的問題。使用全域性變數可以簡化許多資料結構的實現過程,尤其是一些相對複雜的資料結構。我認識的所有演算法競賽的大牛,都非常喜歡使用全域性變數。所以到底該用哪個程式設計客棧並不是固定的,要根據我們的實際需要進行選擇。

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...

c 全域性變數 靜態全域性變數

全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...