### 作用域 能使用某个变量的语句总合叫做变量的作用域。 **局部变量** 声明在函数里面的变量叫局部变量,它的作用域包含函数里面的所有语句。 **全局变量** 声明在所有函数外边的变量叫做全局变量,它的作用域包含程序里的所有语句。 没有初始化的`全局变量`自动被初始化成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`。 静态变量初始化只在程序开始的时候执行一次。 静态全局变量的作用域只包含声明全局变量的文件里的所有语句。 不可以跨文件使用静态全局变量。