### 作用域
能使用某個變量的語句總合叫做變量的作用域。
**局部變量**
聲明在函數里面的變量叫局部變量,它的作用域包含函數里面的所有語句。
**全局變量**
聲明在所有函數外邊的變量叫做全局變量,它的作用域包含程序里的所有語句。
沒有初始化的`全局變量`自動被初始化成0。
全局變量和局部變量可以重名,但是這個名稱優先代表局部變量。
如果局部變量和全局變量都能解決問題,應該優先采用局部變量。
**生命周期**
存儲區的使用時不受作用域限制的,也就是說可以跨函數使用存儲區。
存儲區的時候使用受到生命周期的限制。
生命周期是一段時間,在生命周期開始的時候計算機把存儲區分配給程序使用,在生命周期結束的時候計算機把存儲區收回。
全局變量的生命周期是整個程序的執行時間。
局部變量的生命周期是函數某一次的執行時間范圍。
當函數開始的時候計算機會為局部變量分配存儲區,當函數結束的時候計算機會把局部變量的存儲區收回。
如果函數多次執行則每次執行時局部變量對應的存儲區都可能是新的。
/*
作用域演示
*/
#include <stdio.h>
void func(void){
int num;
printf("num = %d\n", num);
num = 10;
}
void func1(void){
int num = 100;
func();
}
int main(){
func();
func1();
return 0;
}
**靜態變量**
聲明變量的時候可以使用static關鍵字,這種變量叫做靜態變量。
不論是全局變量還是局部變量都可以聲明成靜態的。
所有靜態變量的生命周期都是整個程序的執行時間。
靜態局部變量的存儲區永遠是同一個。
即使函數結束了,靜態局部變量的存儲區也仍然可以使用。
所有沒有初始化的`靜態變量`會自動被初始化成`0`。
靜態變量初始化只在程序開始的時候執行一次。
靜態全局變量的作用域只包含聲明全局變量的文件里的所有語句。
不可以跨文件使用靜態全局變量。