static变量在c语言中的作用
1.子函数中的静态变量
在定义变量前加上static关键字成为静态变量之后,这该变量的生存周期就会更变,直到整个程序运行结束之后,该静态变量才会销毁.
生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间,而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁,除了静态变量之外的局部变量都存放于栈中。
static变量是指静态的变量,不管是在全局还是局部声明的static变量都存放于程序的全局变量区域,所以它的生命周期是从程序开始到程序结束。但是static变量的作用域并不等同于它的生存周期,它的作用域决定于它被定义的位置。
举一个例子:
void test()
{
int m=3;
static int i=5;
}
在test函数运行完之后,变量m就会进行销毁,但变量i不会被销毁,会直到整段程序运行结束,变量i才会被销毁.否则会一直存有数值,但该数值也仅仅在被定义区间有效!
2.全局中的静态变量
在全局定义一个静态变量是想只在该文件程序中使用该变量,与其他文件程序不共享此变量.
举个例子:
在文件A中
int n=3; //默认为extern
static int j=5; //声明为static
全局变量和静态变量j都存放于程序的全局数据区域,它们的生存周期都是程序的整个运行期,但是n的作用域为全局作用域,可以通过extern在其他文件中使用,而j只能在文件A中使用
在文件B中:
extern int n; // allow
extern int j; //error: j在文件B中不可见
也就是说,在声明全局的static变量时,static没有改变它的生存周期,而是将变量的作用域限制在当前文件中。