作用域:一個(gè)變量或者函數(shù)起作用的范圍 生命周期:一個(gè)變量什么時(shí)候被釋放 static關(guān)鍵字:修飾局部變量、修飾全局變量、修飾函數(shù) 1.局部變量的作用域局部變量的作用域是離他最近的一個(gè)代碼塊,比如函數(shù)體的大括號(hào)、if for while循環(huán)體的代碼塊。超出這個(gè)代碼塊則無(wú)法訪問。 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);//無(wú)法訪問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.全局變量的作用域全局變量的作用域?yàn)檎麄€(gè)程序,如果在main.c定義了一個(gè)全局變量,如果在其他c文件使用這個(gè)全局變量則使用extern 聲明即可 3.局部變量的生命周期如上面程序中a的生命周期是理他最近的一個(gè)函數(shù),main函數(shù)結(jié)束,a被釋放。 如上面程序中b的聲明周期是離他最近的一個(gè)函數(shù),test函數(shù)結(jié)束,b被釋放。釋放的意思就是該變量定義在棧上,函數(shù)被調(diào)用結(jié)束,則屬于函數(shù)的棧被收回。 4.全局變量的生命周期整個(gè)程序結(jié)束,全局變量all才會(huì)被釋放 5.函數(shù)的作用域整個(gè)程序所有c文件都可訪問 當(dāng)使用static關(guān)鍵字修飾局部變量、修飾全局變量、修飾函數(shù)時(shí),他們的作用域和生命周期恢復(fù)發(fā)生一些改變。(函數(shù)的生命周期不變,都是伴隨整個(gè)程序) 1 #include<stdio.h> 2 static int all;//靜態(tài)全局變量 3 4 static void test()//靜態(tài)函數(shù) 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; //靜態(tài)局部變量 16 } 17 printf("%d\n",a);//無(wú)法訪問a 18 19 test(); 20 } 21 1.static類型的局部變量作用域不變,生命周期擴(kuò)大伴隨整個(gè)程序 2.static類型的全局變量作用域縮小為當(dāng)前c文件可見。生命周期伴隨整個(gè)程序 3.static類型的函數(shù)作用域縮小為當(dāng)前c文件 |
|