static:
静态变量可以在任何可以申请的地方申请,一旦申请成功后,它将不再接受其他的同样申请
一、局部静态变量
1、静态局部变量存在静态存储区,但是作用域与一般局部变量相同,生命周期一直延续到程序结束(虽然一直存在,但是其他函数不能调用),局部变量到函数结束
2、static所定义的局部变量只在程序刚运行时初始化,且只进行一次,在两次函数调用时,第二次调用函数只保留第一次退出时的值,这体现了static的记忆性(程序一)
#include<stdio.h>
int fun(void)
{
static int a = 10;
return a--;
}
int a = 1;
int main(void)
{
for(; a < 10; a++)
{
printf("%d\n", fun());
}
static int b[10];
for(; a > 0; a--)
{
printf("%d ", b[a]);
}
return 0;
}
3、静态局部变量只能初始化常量和常量表达式,如果初始化没有被赋值,系统会自动赋值为0(数字变量)或空字符(字符变量)
4、静态局部函数占用时间长,可读性差,尽量避免使用
二、静态全局变量
1、全局变量本来就是静态存储方式,所以与静态全局变量同样都储存在静态存储区
2、当源程序由多个源文件组成时,一般全局变量作用域是整个源程序,而静态局部变量限制在当前源文件(声明来了该静态全局变量的cpp文件),其他源文件不能使用
三、静态函数
1、静态函数只在当前文件可见,不能被其他文件可见,其他文件可以定义同名函数
2、具有计数器,统计次数的功能