C Primer Plus 第12章 12.9 總結

用於存儲程序數據的內存可用存儲時期、做用域和連接來表徵。存儲時期能夠是靜態的、自動的或者分配的。若是是靜態的,內存在程序開始執行時被分配,並在程序運行時一直存在。若是是自動的,變量所用的內存在程序執行到該 變量定義所在的代碼塊時開始分配 ,在退出代碼塊時釋放。若是是分配 的內存,內存經過調用malloc()分配,經過調用函數free()釋放。函數

做用域決定了哪一部分程序能夠訪問某個數據。在全部函數以外定義的變量具備文件做用域,並對該變量聲明以後定義的所有函數可見。在代碼塊內定義或者做爲函數參量定義的變量具備代碼塊做用域,並只在該代碼塊及其子代碼塊中可見。優化

連接描述了程序的某個單元定義的變量可被連接到其餘哪些地方。具備代碼塊做用域的變量做爲局部變量,具備空連接。具備文件做用域的變量可有內部連接或外部連接。內部連接意味着變量只可在包含變量定義的文件內部使用。外部連接意味着變量也能夠在其餘文件中使用。spa

下面是C的一種存儲類:指針

C的5種存儲類
自動 在一個代碼塊內(或一個函數頭部做爲參量)聲明的變量,不管有沒有存儲類修飾符auto,都屬於自動存儲類。該類具備自動存儲時期、代碼塊做用域和空連接。如未經初始化,它的值是不定的。
寄存器 在一個代碼塊內(或一個函數頭部做爲參量)使用存儲類修飾符register聲明的變量屬於寄存器存儲類。該 類具備自動存儲時期、代碼塊做用域和空連接,而且您沒法得到其地址。把一個變量聲明爲寄存器變量能夠指示編譯器提供可用的最快訪問。如未經初始化,它的值是不定的。
靜態、空連接   在一個代碼塊內使用存儲類修飾符static聲明的變量屬於靜態空連接存儲類。該 類具備靜態存儲時期、代碼塊做用域和空連接,僅在編譯時初始化一次。若是未經初始化,它的字節都設定爲0.
靜態、外部連接 在全部函數外部定義、未使用存儲類修飾符static的變量屬於靜態、外部連接存儲類。該類具備靜態存儲時期、文件做用域和外部連接,僅在編譯時初始化一次。如未經初始化,它的字節都被設爲0。
靜態、內部連接 在全部函數外部定義、使用存儲類修飾符static的變量屬於靜態、內部連接存儲類。該 類具備靜態存儲時期、文件做用域和內部連接,僅在編譯時初始化一次。若是明確初始化,它的字節都被設定爲0。

分配內存是使用函數malloc()提供的內存,該函數返回一個指向具備所請求字節數的內存塊的指針。將這一內存塊的地址做爲參數來調用free(),可使該內存塊從新可用。rest

類型限定詞說明符有const、volatile和restrict。說明符const將數據限定爲不變的。在使用指針時,const能夠代表指針自己不變或指針指向的數據不變,這取決於const在聲明 中的位置。說明符volatile代表數據除了可被程序修改外還能夠經過其餘方式修改,其目的是警示編譯器在優化時不要作出相反的假定。說明符restrict也是爲了優化而設置。由restrict限定的指針被認爲是提供了對其所指向的數據塊的唯一訪問途徑。內存

相關文章
相關標籤/搜索