变量的存储类型如下:
1.自动型变量。
定义一个内部变量时,如果将auto加在定义语句前面,则该变量是自动型变量。
定义内部变量时,如果没有加任何存储类型限定,该变量默认为自动型变量。
auto只能修饰内部变量,不能修饰外部变量,即只有内部变量可以定义为自动型变量,外部变量不能定义为自动型变量。
2.静态型变量。
外部变量和内部变量都可以定义为静态型变量。
如果在定义一个内部变量时,在定义语句最前面加上static存储类型限定词,那么该变量将是一个静态型变量。
这种变量作用域虽然只在函数部,但是该变量将一直在静态数据区占据存储空间,直到程序运行结束。
3.寄存器型变量。
register限定词通知编译器--程序中的变量将频繁使用,可编译器将程序中用register限定的变量放置在计算机的内部寄存其中,这样可得到更小更快的程序。
编译器将根据实际情况将register变量处理为寄存器变量最终决定权还是在编译器。
4.外部型变量。
如extern用于变量定义语句前面,则该语句就只能是一个声明语句,也不再是一个变量定义语句。
变量作用域总的分为局部变量和全局变量,局部变量又可分为动态局部变量和静态局部变量。
两者的区别在于,静态的局部变量生存期比动态的局部变量来的长,动态的局部变量的生存期为所定义的范围内,如在函数内定义的,函数结束,变量也跟着结束,变量的值不会保存下来,而静态变量的生存期为整个源程序,而两者的作用域是一样,只能在定义他的函数内起作用,离开了这个函数就不起作用。
全局变量,在函数之外定义的变量称为全局变量,全局变量可以为本文件中其他函所共用,它的有效范围从定义变量开始到文件结束, 如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被屏蔽,即全局变量不起作用。