static关键字+变量的做用域和生命周期

做用域:一个变量或者函数起做用的范围函数

生命周期:一个变量何时被释放spa

static关键字:修饰局部变量、修饰全局变量、修饰函数code

1.局部变量的做用域

局部变量的做用域是离他最近的一个代码块,好比函数体的大括号、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  }

2.全局变量的做用域

全局变量的做用域为整个程序,若是在main.c定义了一个全局变量,若是在其余c文件使用这个全局变量则使用extern 声明便可生命周期

3.局部变量的生命周期

如上面程序中a的生命周期是理他最近的一个函数,main函数结束,a被释放。作用域

如上面程序中b的声明周期是离他最近的一个函数,test函数结束,b被释放。释放的意思就是该变量定义在栈上,函数被调用结束,则属于函数的栈被收回。io

4.全局变量的生命周期

整个程序结束,全局变量all才会被释放class

5.函数的做用域

整个程序全部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  

1.static类型的局部变量

做用域不变,生命周期扩大伴随整个程序

2.static类型的全局变量

做用域缩小为当前c文件可见。生命周期伴随整个程序

3.static类型的函数

做用域缩小为当前c文件

相关文章
相关标签/搜索