1、静态变量分静态局部变量和静态全局变量。静态变量存储在程序的全局区(静态区)。静态变量定义时若未初始化,则编译器自动为其初始化为0.其他类型的变量若未初始化,则其值就是内存中原始的二进制码代表的值。若一个函数递归,在函数体内定义静态变量并赋初值,则只有函数第一次被调用时,静态变量的定义并赋初值成立,之后的每次递归调用函数时,静态变量的定义并赋初值语句将不被执行。
静态变量指在变量定义时就分配好内存,在整个程序运行时期内持续存在的变量。静态局部变量是在函数内部定义的,并且用关键字static加以限制,静态局部变量的生存周期是整个程序周期(即程序执行运行期间都会存在),静态局部变量的作用域是函数内部,定义静态局部变量的函数之外不能使用该静态局部变量。静态局部变量的作用是在同一个程序执行过程中对同一个函数的不同调用之间共享该静态局部变量。
全局静态局部变量是在声明全局变量的时候加上关键字static。全局变量(无论是否为静态的)是静态存储方式(定义时就分配好内存,并且整个程序周期内持续存在),在全局变量定义后面定义的函数都可以使用全局变量(同一个文件中,全局变量定义之前的函数要想使用全局变量,必须在函数之前加上extern全局变量声明)。其他文件B中若想使用本文件A中的全局变量,必须在文件B的开头加上extern变量声明。静态全局变量与非静态全局变量的区别是:非静态全局变量在其他文件中可以通过加入extern变量声明来使用本文件中的非静态全局变量,而静态全局变量只能在本文件中使用,在其他文件中不能使用。注意:如果你在函数外这样声明一个变量,const int a ;