按作用域可分为
局部变量:函数级局部变量,复合语句级局部变量,这种类型的变量在本函数或本复合语句内有效,在其他范围内无效。
全局变量:在函数外定义,从定义开始到本文件结束有效。
按存储方式可分为
静态存储区存储:全局变量和static局部变量全部存放在静态存储区,从定义开始占用内存一直到本文件结束释放内存,存放在静态存储区的局部变量并不随着局部程序的结束而被释放,但是其他函数或复合语句也不能引用。存放在静态存储区的变量不赋初值则自动为0,全局变量和静态变量的初值是在编译时指定的;
动态存储区存储:如一些不加static的局部变量均存放在动态存储区,这些变量随着定义而开始,随着局部程序的结束而被释放,下次执行再次重新定义。存放在静态存储区的变量不赋初值初值不确定;
关于extern和static的说明:extern可以扩展全局变量的范围,而static则可以限制这种扩展;extern只是声明一个变量,并不会再次分配存储空间。
如:在f1文件中定义的全局变量a,在f2中使用这个变量需要extern a;在f1文件中如果定义static的全局变量a,其他文件就无法使用了;