物聯(lián)網(wǎng)/嵌入式工程師
重磅升級:新增硬件電路設(shè)計與實戰(zhàn),讓你軟硬通吃,同級PK無敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢!
代碼塊中定義的變量被稱之為局部變量。它們在其他函數(shù)的語句中是不可見的,也無法訪問它們。例如:
#include <stdio.h> #include <stdlib.h> int main(int argc,char **argv) { int a = 2; return 0; }
這個例子里面,int 變量 a,就是一個局部變量,局部變量 a 的作用域就在 main 函數(shù)之內(nèi)。出了 main 函數(shù),就無效了。
我們在入門課程中學(xué)過棧內(nèi)存,也知道,對于這個局部的棧變量,在函數(shù)開始的時候分配,在函數(shù)結(jié)束的時候自動被銷毀掉。
記住這個局部變量的特性,之后會用到。
全局變量是在所有函數(shù)體的外部定義的,程序的所有部分都可以使用。全局變量不受作用域的影響,其生命周期一直到程序的結(jié)束。
int a = 2; int main(int argc,char **argv) { return 0; }
在有些情況下,我們申明一個全局變量會比較麻煩,尤其是項目比較大的時候,全局變量不受作用域的影響,很容易造成混淆。因此,我們引入了靜態(tài)變量。靜態(tài)變量受作用域的影響,其生命周期一直到程序的結(jié)束。
例如:
void func() { static int a = 0; }
我們可以在函數(shù)中申明一個靜態(tài)變量。值得注意的是,這個變量的作用域雖然是在函數(shù)內(nèi),但是他并不會隨著函數(shù)結(jié)束而被銷毀,它會一直存在到程序的結(jié)束。
我們在這個函數(shù)中,將 a 變量進(jìn)行累加,每次函數(shù)被調(diào)用,a 都會加一,并且打印 a 的值
void func() { static int a = 0; a++; printf("a: %d\n", a); }
然后我們在 main 函數(shù)中對 func 函數(shù)進(jìn)行多次調(diào)用:
int main(int argc,char **argv) { func(); func(); func(); func(); return 0; }
運行程序,控制臺會出現(xiàn)以下結(jié)果:
a: 1 a: 2 a: 3 a: 4
可以看到,每次調(diào)用,都順利累加,這就說明,靜態(tài)變量的生命周期一直到程序的結(jié)束的。
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報