詳解全局變量,全局變量與全局靜態變量的區別

特點:

  • ① 作用域:全局可見。
           全局變量(外部變量)是在函數外部定義的,它的作用域爲從變量的定義處開始,到本程序文件的末尾。
           注:通常把超出一個函數的作用域稱爲全局作用域,其他幾種(如塊作用域)不超出一個函數的作用域稱爲局部作用域。
  • ② 存儲空間:靜態存儲區
           系統會在編譯時將全局變量分配在靜態存儲區,在程序執行期間,對應的存儲空間不會釋放,一直到程序結束纔會釋放。
           注:一個程序在內存中佔用的存儲空間可以分爲3個部分:程序區(存放可執行程序的代碼)、靜態存儲區(存放靜態變量)、動態存儲區(存放動態變量)。
  • ③ 優先度:全局變量優先度低於局部變量
    當全局變量和局部變量重名時,會屏蔽全局變量,局部優先。
           

優點:使用全局變量程序運行時速度會快一點,因爲內存不需要再分配。
缺點:使用全局變量會佔用更多的內存,因爲其生命期長。
.
.

全局變量作用域的擴展和限制:

  • ① 擴展:使用extern關鍵字可以對全局變量的作用域進行擴展。
            前面提到,全局變量的作用域爲從變量的定義處開始,到本程序文件的末尾。若想在本文件全局變量定義之前引用該全局變量,可以在引用之前用extern關鍵字對該變量進行說明,有了此說明,就可以從說明之處起,合法地引用該變量。
            若想在一個文件(設爲a.cpp)中引用另一個文件(設爲b.cpp)中已定義的全局變量,可以在a.cpp中extern關鍵字對該全局變量進行說明,在編譯和連接時,系統就會知道該全局變量已經在其他文件(b.cpp)中定義過了。
           注:在編譯時遇到extern,系統會現在本文件中查找全局變量的定義,如果找到,就在本文件中擴展作用域;如果找不到,就在連接時在其他文件中查找全局變量的定義,如果找到,就將作用域擴展到本文件;如果還找不到,按出錯處理。

  • ② 限制:使用static關鍵字可以限制全局變量的作用域。(又稱之爲隱藏)
           全局變量默認是有外部鏈接性的,作用域是整個工程,在一個文件內定義的全局變量,在另一個文件中,通過extern對全局變量進行聲明,就可以使用全局變量。
           如果希望全局變量僅限本文件引用,而不能被其他文件引用,可以在定義全局變量時在前面加一個static關鍵字。
    .
    .

全局變量和全局靜態變量的區別:

       首先,並不是說全局變量在定義時加了static關鍵字纔是靜態存儲,不加static就是動態存儲,不是的。不管加不加static,全局變量都是存儲在靜態存儲區的,都是在編譯時分配存儲空間的,兩者只是作用域不同,全局變量默認具有外部鏈接性,作用域是整個工程,全局靜態變量的作用域僅限本文件,不能在其他文件中引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章