做用域:一个变量或者函数起做用的范围函数
生命周期:一个变量何时被释放spa
static关键字:修饰局部变量、修饰全局变量、修饰函数code
局部变量的做用域是离他最近的一个代码块,好比函数体的大括号、if for while循环体的代码块。超出这个代码块则没法访问。blog
1 #include<stdio.h> 2 int all; 3 int main() 4 { 5 6 if(1) 7 { 8 int a = 10; //a 的做用域就是第7-9行 9 } 10 printf("%d\n",a);//没法访问a 11 12 test(); 13 } 14 15 void test() 16 { 17 int b = 6; //b 的做用域就是第17-20行 18 printf("%d\n",b); 19 20 }
全局变量的做用域为整个程序,若是在main.c定义了一个全局变量,若是在其余c文件使用这个全局变量则使用extern 声明便可生命周期
如上面程序中a的生命周期是理他最近的一个函数,main函数结束,a被释放。作用域
如上面程序中b的声明周期是离他最近的一个函数,test函数结束,b被释放。释放的意思就是该变量定义在栈上,函数被调用结束,则属于函数的栈被收回。io
整个程序结束,全局变量all才会被释放class
整个程序全部c文件均可访问test
当使用static关键字修饰局部变量、修饰全局变量、修饰函数时,他们的做用域和生命周期恢复发生一些改变。(函数的生命周期不变,都是伴随整个程序)变量
1 #include<stdio.h> 2 static int all;//静态全局变量 3 4 static void test()//静态函数 5 { 6 int b = 6; 7 printf("%d\n",b); 8 9 } 10 int main() 11 { 12 13 if(1) 14 { 15 static int a = 10; //静态局部变量 16 } 17 printf("%d\n",a);//没法访问a 18 19 test(); 20 } 21
做用域不变,生命周期扩大伴随整个程序
做用域缩小为当前c文件可见。生命周期伴随整个程序
做用域缩小为当前c文件