static为静态的意思, 在C语言中, 使用static关键词来对变量的作用域进行控制, C语言中的变量分为全局变量与局部变量两种, 因此作用域简单的分为两种:
一种是全局作用域, 另一种是局部作用域, 全局变量, 也就是不加static关键词, 并定义在main函数之外的变量, 作用范围是整个程序范围, 同一个文件, 和在多个文件之间生效.
另一种是局部变量, 如在for循环中定义的变量, 在函数中的变量, 这样的变量在代码快执行时则有效, 代码一旦执行完毕, 则会立即被系统从内存中清理出去.
static就是改变变量的作用域
1.函数内部
普通函数中的变量, 随函数的执行而存在, 而在函数内部加上static修饰的变量, 则随函数的存在而存在, 主要前面是执行, 后面是函数的存在, 当static放到一个函数内部修饰变量时, 变量就能在整个程序的执行过程中保持存在而不是仅仅在整个函数的执行过程中存在, 因此有了一点全局变量的特性.
实际上static int res并不算是函数fac中的代码, 因为, 每次调用fac函数时, 这行代码并不执行, 初始化res是在程序装入内存中时完成的, 其地址不再变化, 如果没有对静态变量显式声明, 系统默认初始化为0, 而这行代码写在fac函数内是表明, 这个变量只是用来给fac函数访问的.
看看下面这个程序, 调用10次fac函数, res将被修改为10
#include
int fac()
{
static int res = 0;
res++;
return res;
}
int main()
{
int n = 4;
int t;
for (int i = 0; i < 10; i++)
t = fac();
printf("%d", t);
return 0;
}
2.函数外部 不加static的全局变量作用在不同文件之间, 和本文件的所有函数中, 对函数外部的变量加static修饰之后, 变量则失去了夸文件访问的特性, 只能在本文件中被访问