變量的作用域

用於存儲程序數據的內存可以用存儲時期、作用域和鏈接來表徵。
    存儲時期可以是靜態的、動態的或分配的。如果是靜態的,內存在程序開始執行時被分配,並在程序運行時一直存在。如是動態的,變量所用的內存在程序執行到帶 變量定義所在代碼塊時開始分配,在退出代碼塊時釋放,如果是分配的內存,內存在調用malloc()等函數時分配,在調用free()時釋放。
    作用域決定了哪部分程序可以訪問某個數據。在所有函數之外定義的變量具有文件作用域,並對該變量聲明之後定義的所有函數可見。在代碼塊內定義或者作爲函數參數定義的變量具有代碼塊作用域,只在該代碼塊及其子代碼塊中可見。
    連接描述了程序的某個單元定義的變量可被連接到其他那些地方。具有代碼塊作用域的變量作爲局部變量,具有空連接。具有文件作用域的變量可以有內部連接或外部連接。內部連接意味只可以在包含變量定義的文件內部使用,外部連接意味變量可以在其他文件中使用。

    變量的存儲類決定了他的存儲時期、作用域和鏈接。存儲類由聲明變量的位置和與之相關的關鍵字來決定。
    在所有的函數之外定義的變量是外部變量,作用域爲整個文件,具有外部連接,靜態存儲時間。除非使用了其他關鍵字,在函數中聲明的變量是自動變量,具有代碼 塊作用域,空連接、自動存儲時間。在函數中使用關鍵字static定義的變量具有代碼塊作用域,空連接,靜態存儲時間。在函數外使用關鍵字static定 義的變量具有文件作用域,內部連接,靜態存儲時間

    除了存儲類,C還提供了可分配內存(allocated   memory),這種內存通過調用malloc等函數來分配,它返回一個指向該內存的指針,在調用free或程序終止之前該內存保持已分配狀態。任何可以訪問該指針的函數都可以訪問這塊內存。

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