對于變量的存儲類型,前面遇到過一些疑惑,再簡單的在這里說一下。存儲類型是指存儲變量值的內存類型,它用來決定存儲空間的大小。變量的存儲類型決定著變量的存儲器和作用域。有三個地方可以用于存儲變量:普通內存、運行時堆棧、硬件寄存器。在這三個地方存儲的變量具有不同的特性。
本文引用地址://www.dgruiqian.com/emb/Column/7300.html
存儲期:變量占據內存的時間期限-----與函數共存、與程序共存。
作用域:變量出現的有效區域-----函數內、本文件內、多文件內。
自動類型:auto為存儲類說明符,可以說明一個變量為自動變量。在一個代碼塊內聲明的變量,無論有沒有存儲類修飾符auto,都屬于自動存儲類。該類具有自動存儲時期、代碼塊的作用域和空鏈接(no linkage)。如未初始化,它的值是不確定的。
寄存器存儲:關鍵字register可以用于自動變量的聲明,提示他們應該存儲于機器的硬件寄存器而不是內存中,這類變量稱為寄存器變量。通常,寄存器變量比存儲于內存的變量訪問起來效率更高。但是,編譯器并不一定要理財register關鍵字,如果有太多的變量被聲明為register,它只選取前幾個實際存儲于寄存器中,其余的就按普通自動比那輛處理。如果一個編譯器自己具有一套寄存器優化方法,它可能忽略register關鍵字。
靜態存儲:對于在代碼塊內部聲明的變量,如果給它加上關鍵字static,可以使他的存儲類型從自動變為靜態。具有靜態存儲類型的變量在整個程序執行過程中一直存在,而不僅僅在聲明它的代碼塊的執行時存在。注意,修改變量的存儲類型并不標示修改該變量的作用域,它任然只能在該代碼塊內部按名字訪問。函數的形式參數不能聲明
變量的缺省存儲類型:這取決于它的聲明位置。1、凡是在任何代碼塊之外聲明的變量(全局變量)總是存儲于靜態內存中,也就是不屬于堆棧的內存,這類變量成為靜態變量。對于這類變量,你無法為他們制定其他存儲類型。2、而在代碼塊內部聲明的變量(局部變量)的缺省存儲類型時是自動的(automatic),也就是說他存儲于堆棧中,成為自動變量。有一個關鍵字auto就是用修飾這種存儲類型的,但它極少使用。
內容先講這些,自己碰到的問題,也希望能對大家有所幫助!