根据局部和全局、静态和非静态,可以将变量分为4种:非静态局部变量、非静态全局变量、静态局部变量和静态全局变量,为方便起见,下称为局部变量、全局变量、静态局部变量和静态全局变量。
从作用域上:
1. 局部变量只在声明它的函数中可用;
2. 全局变量在声明它的源文件中可用,可通过extern关键字被其他源文件使用;
3. 静态局部变量只在声明它的函数中可用;
4. 静态全局变量只在声明它的源文件中可用,其他源文件不可用。
从存储域(生存周期)上:
1. 局部变量存储在栈区,函数返回后被回收;
2. 剩下三者存储在静态存储区,程序执行结束后被回收。
其他:
1. 局部变量在每次调用函数时都要分配一次内存,如果没有初始化,那么值不可知;
2. 剩下三者只分配一次内存,如果没有初始化,则由编译器初始化为0。
综上,局部变量与静态局部变量的区别是生存周期,全局变量与静态全局变量的区别是作用域。