普通區域性變數(自動變數)
• 在乙個函式內定義,只在函式範圍內有效。
• 在復合語句中定義,只在符合語句中有效。
• 隨著函式呼叫的結束或復合語句的結束而消亡。
• 如果沒有賦初值,則內容為隨機值。
2.
靜態區域性變數static
• 作用域:定義的函式內有效。
• 生命週期:在定義的整個週期,靜態區域性變數始終從在著,即使退出函式,仍然存在。
• 初值:若未賦以初值,則由系統自動賦值;數值型變數自動賦值為0,字元型變數賦空字元。
1.
普通全域性變數
• 在函式外定義,可被本檔案及其它檔案中的函式所共用,若其它檔案中的函式呼叫此變數,須用extern宣告。
• 生命週期:在程式執行的整個週期都存在。
• 不同檔案的全域性變數不可重名。
2.靜態全域性變數static
• 在函式外定義,作用範圍被限制在所定義的檔案中,即其它檔案中的函式沒法使用。
• 不同檔案靜態全域性變數可重名,但作用域不衝突。
• 生命週期:整個程式執行的週期。
3.說明
• 允許在不同的函式中使用相同的變數名,它們代表不同的物件,分配不同的單元,互不干擾。
• 同一原始檔中,允許全域性變數和區域性變數同名,在區域性變數的作用域內,全域性變數不起作用。
• 乙個變數宣告為const變數,意味著該變數是乙個常量,不可被修改。
• const變數在定義的時候進行初始化。
• 在使用過程中const修飾的變數只能做右值而不能做左值。
• 一般用於修飾一些不想程式中對其值發生改變的變數。
• 告訴系統register修飾的變數將被頻繁使用,對其分配位址時盡量將其分配在暫存器中,以提高訪問速度。
• 這個修飾詞只是告知cpu盡量將變數分配在暫存器中,不一定真的分配(可能優化處理)。
• register變數必須是乙個單個的值,並且其長度應小於或等於整型的長度。
• 區域性變數和形參可作為register變數,全域性變數或靜態變數不行。
• register變數可能不存放在記憶體中,不能用取位址運算子「&」來獲取register變數的位址,也不能用指標來操作。
• 表示變數是易失的,易變的。
• 強制訪存操作,防止編譯器去優化,告訴編譯器每次必須去記憶體中取值,而不是從暫存器或者快取中取值。
使用情況:
• 並行裝置的硬體暫存器(如:狀態暫存器)。
• 乙個中斷服務子程式中會訪問到的非自動變數(全域性變數、靜態變數)。
• 多執行緒應用中被幾個任務共享的變數。
變數的儲存類別
從變數的作用域來分,變數可以分為全域性變數和區域性變數。在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。全域性變數的優點是 可以減少函式實參和形參的個數,從而減少記憶體空間以...
變數的儲存類別
儲存類別 是指資料在記憶體中的儲存方式 1 供使用者使用的儲存空間 程式區靜態儲存區 編譯時候分配空間,程式結束釋放空間。存放全域性變數 動態儲存區 定義時動態分配空間,對應函式完成時就釋放空間,再呼叫時又重新動態分配空間。存放auto型別區域性變數 2 儲存型別 auto,static,regis...
4 12 變數的儲存類別
我們已經了解了變數的作用域。作用域是從空間的角度來分析的,分為全域性變數和區域性變數。變數還有另一種屬性 儲存期 storage duration,也稱生命期 儲存期是指變數在記憶體中的存在期間。這是從變數值存在的時間角度來分析的。儲存期可以分為靜態儲存期 static storage durati...