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