a.普通局部變量
屬於某個{},在{}外部不能使用此變量,在{}內部是可以使用。執行到普通局部變量定義語句,才會分配空間,離開{},自動釋放。普通局部變量不初始化,默認值為隨機數。
b.static局部變量
屬於某個{},在{}外部不能使用此變量,在{}內部是可以使用。在編譯階段就已經分配空間,初始化只能使用常量。static局部變量不初始化,默認值為0。離開{},static局部變量不會釋放,只有整個程序結束才釋放。
注意:靜態局部變量的作用域屬於某個{},但是它的生命周期卻是從編譯階段到整個程序結束。
c.普通全局變量
在編譯階段分配空間,只有整個程序結束才釋放。普通全局變量只要定義了,任何地方都能使用,使用前需要聲明所有的.c文件,只能定義一次普通全局變量,但是可以聲明多次(外部鏈接)。
注意:全局變量的作用域是全局范圍,但是在某個文件中使用時,必須先聲明。
d.static全局變量
在編譯階段分配空間,只有整個程序結束才釋放。static全局變量只能在定義所在的文件中使用此變量(內部鏈接)。不同的.c文件,可以定義一次static全局變量。
e.extern函數和static函數的區別(作用域)
extern函數所有文件都是調用,所有文件中只能定義一次extern函數。
static函數只能在定義所在的文件中調用此函數,不同文件,可以定義一次static函數。
