c語言 作用域和生命週期
a.普通區域性變數
屬於某個{},在{}外部不能使用此變數,在{}內部是可以使用。執行到普通區域性變數定義語句,才會分配空間,離開{},自動釋放。普通區域性變數不初始化,預設值為隨機數。
b.static區域性變數
屬於某個{},在{}外部不能使用此變數,在{}內部是可以使用。在編譯階段就已經分配空間,初始化只能使用常量。static區域性變數不初始化,預設值為0。離開{},static區域性變數不會釋放,只有整個程式結束才釋放。
注意:靜態區域性變數的作用域屬於某個{},但是它的生命週期卻是從編譯階段到整個程式結束。
c.普通全域性變數
在編譯階段分配空間,只有整個程式結束才釋放。普通全域性變數只要定義了,任何地方都能使用,使用前需要宣告所有的.c檔案,只能定義一次普通全域性變數,但是可以宣告多次(外部鏈結)。
注意:全域性變數的作用域是全域性範圍,但是在某個檔案中使用時,必須先宣告。
d.static全域性變數
在編譯階段分配空間,只有整個程式結束才釋放。static全域性變數只能在定義所在的檔案中使用此變數(內部鏈結)。不同的.c檔案,可以定義一次static全域性變數。
e.extern函式和static函式的區別(作用域)
extern函式所有檔案都是呼叫,所有檔案中只能定義一次extern函式。
static函式只能在定義所在的檔案中呼叫此函式,不同檔案,可以定義一次static函式。
怎樣記憶c語言中的作用域和生命週期?
要理解c語言中各種變數的作用域和生命週期,必須結合c語言的記憶體管理。詳情見部落格:
全域性變數和靜態變數是在程式編譯期就分配到資料段或bss段中的,在整個程式的執行期,資料段和bss段中的內容是不會發生改變的。所以所有的全域性變數和靜態變數的生命週期必定是從程式編譯到程式執行結束。而且如果全域性變數和靜態變數沒有初始化,會統一預設初始化為0.
而區域性變數是在程式的執行時,在棧中分配的記憶體,所以生命週期一定是從程式執行的某乙個時刻開始。
C語言變數作用域和生命週期
1 c語言不支援對形參變數的引用,也就是說,形參變數的作用域僅在於函式定義域內 2 有的c語言編譯器支援對變數不在函式開始的時候定義 3 全域性變數可以作為函式間通訊的乙個工具 4 全域性變數可以通過減少函式形引數,較少記憶體空間,較少傳遞資料的時間消耗 5 動態變數的生命週期和其所在的汗水一樣 6...
C語言中變數的作用域和生命週期
譚浩強書 從儲存模型可以看到,譚浩強和錢能的模型有一定的對應關係 靜態儲存區 全域性資料區 動態儲存區 棧 stack 變數的型別 1.區域性變數和全域性變數 區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開該函式後再使用這種變數是非法的。全域性變數也稱為外部變...
C語言中變數的作用域和生命週期
譚浩強書 從儲存模型可以看到,譚浩強和錢能的模型有一定的對應關係 靜態儲存區 全域性資料區 動態儲存區 棧 stack 變數的型別 1.區域性變數和全域性變數 區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內,離開該函式後再使用這種變數是非法的。全域性變數也稱為外部變...