关于全局变量、局部变量和static
- 变量有全局变量、局部变量之分。全局变量的作用域是从声明的那一行开始,默认是可以被外部引用的。而局部变量是在函数内声明的。局部变量的生命随着函数调用的结束而结束。而全局变量的生命周期会保留直到程序运行完毕。
- 以上说的是正常情况,如果遇到非正常情况,比如加了static。那么情况则完全不同了。
static作用的变量被称为静态变量。当static 修饰全局变量的时候,则该变量本可以被外部文件调用,现在变得不可以了。 当static 修饰局部变量的时候么,则本来在函数调用结束的时候就释放了的变量现在变得一直存在,直到程序结束。 可以理解为static告诉系统,这个变量你只要声明一次,以后在本程序运行完毕前你都不需要声明了,直接用。
一个例子
/* 函数内声明一个局部变量,并且加上static关键字,当函数调用结束后,该变量并不会被销毁依然存在,如何通过程序证明之*/
#include <stdio.h>
void func1(void)
{
static int a = 100;
a++;
printf("%d\n",a);
}
int main(void)
{
func1();
func1();
func1();
}
/*输出
101
102
103
声明一个变量,给我的感觉就是,让系统为该变量分配内存。
在局部变量用static声明之后,告诉系统,这个变量只分配一次内存,以后每次调用,不用再分配内存。
*/