C語言 變量的作用域和生命週期

C語言 作用域和生命週期


a.普通局部變量
屬於某個{},在{}外部不能使用此變量,在{}內部是可以使用。執行到普通局部變量定義語句,纔會分配空間,離開{},自動釋放。普通局部變量不初始化,默認值爲隨機數。


b.static局部變量
屬於某個{},在{}外部不能使用此變量,在{}內部是可以使用。在編譯階段就已經分配空間,初始化只能使用常量。static局部變量不初始化,默認值爲0。離開{},static局部變量不會釋放,只有整個程序結束才釋放。
注意:靜態局部變量的作用域屬於某個{},但是它的生命週期卻是從編譯階段到整個程序結束。


c.普通全局變量
在編譯階段分配空間,只有整個程序結束才釋放。普通全局變量只要定義了,任何地方都能使用,使用前需要聲明所有的.c文件,只能定義一次普通全局變量,但是可以聲明多次(外部鏈接)。
注意:全局變量的作用域是全局範圍,但是在某個文件中使用時,必須先聲明。


d.static全局變量
在編譯階段分配空間,只有整個程序結束才釋放。static全局變量只能在定義所在的文件中使用此變量(內部鏈接)。不同的.c文件,可以定義一次static全局變量。


e.extern函數和static函數的區別(作用域)
extern函數所有文件都是調用,所有文件中只能定義一次extern函數。
static函數只能在定義所在的文件中調用此函數,不同文件,可以定義一次static函數。


怎樣記憶C語言中的作用域和生命週期?
要理解C語言中各種變量的作用域和生命週期,必須結合C語言的內存管理。詳情見博客:http://blog.csdn.net/u011616739/article/details/61621815
全局變量和靜態變量是在程序編譯期就分配到數據段或bss段中的,在整個程序的運行期,數據段和bss段中的內容是不會發生改變的。所以所有的全局變量和靜態變量的生命週期必定是從程序編譯到程序運行結束。而且如果全局變量和靜態變量沒有初始化,會統一默認初始化爲0.
而局部變量是在程序的運行時,在棧中分配的內存,所以生命週期一定是從程序運行的某一個時刻開始。
 

發佈了18 篇原創文章 · 獲贊 5 · 訪問量 2968
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章