C 中變數的作用域與生命週期

2021-05-22 16:28:06 字數 976 閱讀 5611

今天在論壇上看到有朋友發帖問道:既然靜態全域性變數與全域性變數都儲存在全域性資料區,為什麼作用域卻不一樣呢?也許答案非常簡單:c++就是這麼規定的,靜態全域性變數與全域性變數的唯一區別就是作用域不同。

對乙個c++變數來說,有兩個屬性非常重要:作用域和生命週期,它們從兩個不同的維度描述了乙個變數--時間和空間。顧名思義,作用域就是乙個變數可以被引用的範圍,如:全域性作用域、檔案作用域、區域性作用域;而生命週期就是這個變數可以被引用的時間段。不同生命週期的變數,在程式記憶體中的分布位置是不一樣的。乙個程式的記憶體分為**區、全域性資料區、堆區、棧區,不同的記憶體區域,對應不同的生命週期。

有很多方法來指定乙個變數的作用域和生命週期。最常見的,如:、static修飾符等。下面按照作用域與生命週期來對變數做乙個分類:

全域性變數

全域性靜態變數

靜態區域性變數

區域性變數

還有一點要說明,掌握static關鍵字的使用很關鍵。以下是引用別人的一些經驗之談:

tips:

若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;

若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;

設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題,因為他們都放在靜態資料儲存區,全域性可見;

如果我們需要乙個可重入的函式,那麼,我們一定要避免函式中使用static變數(這樣的函式被稱為:帶「內部儲存器」功能的的函式)

函式中必須要使用static變數情況:比如當某函式的返回值為指標型別時,則必須是static的區域性變數的位址作為返回值,若為auto型別,則返回為錯指標。

來csdn很久了,一直都想寫點東西,今天終於出手了。水平有限,只能跟大家分享一些基礎知識的總結,以共勉,共同提公升。

2010-05-2900:18:07

變數的生命週期與作用域

變數的型別 區域性變數和全域性變數 對於c 變數來說,有兩個屬性非常重要 作用域和生命週期,它們從兩個不同的維度描述了乙個變數的時間和空間。區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開該函式後再使用這種變數是非法的。全域性變數也稱為外部變數,它是在函式外部定...

作用域與生命週期

作用域與生命週期是描述了常量,變數,函式的等物件的使用範圍,當程式 中這些物件一旦超過了這個範圍,那麼將出現編譯錯誤。下面我們來研究一下它 區域性作用域描述的是函式體中變數和函式的適用範圍,每乙個函式都有自己的區域性作用域。在函式體中定義的變數,函式對於外部函式是不可見的看,因為他們在函式的區域性作...

作用域與生命週期

在c 語言中名字有作用域,物件 變數 有生命週期。如果不理解這兩個概念那麼我們一般會犯很多低階的錯誤。比如返回區域性物件的引用等。include using namespace std return local array int func1 return a return local object...