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文件

相關文章
相關標籤/搜索