C語言基礎之靜態本地變數

2021-10-09 13:40:18 字數 1191 閱讀 4940

靜態本地變數

◆ 在本地變數定義時加上static修飾符就成為靜態本地變數

◆ 當函式離開的時候,靜態本地變數會繼續存在並保持其值

◆ 靜態本地變數的初始化只會在第一次進入這個函式時做,以後進入函式時會保持上次離開時的值

【例1】普通的本地變數

#includeint f(void);

int main(int agrc, const char* ar**)

int f(void)

【例2】靜態本地變數

我們發現,這個靜態本地變數只做了一次初始化的工作,之後的第二次、第三次進入函式f()時,all的值為上一次退出f()的值

靜態本地變數

◆ 靜態本地變數實際上是特殊的全域性變數

◆ 它們位於相同的記憶體區域

◆ 靜態本地變數具有全域性的生存期,函式內的區域性作用域(也就是說static型別的變數,其生存期和作用域是分離的)

★ static在這裡的意思是區域性作用域(本地可訪問)

#includeint f(void);

int gall = 12;

int main(int agrc, const char* ar**)

int f(void)

執行後的結果如下圖所示,這說明all的位址為0x0095b038,而gall的位址為0x0095b034。

這說明,靜態本地變數all的位址和全域性變數gall的位址相差4位元組,而在本機中,sizeof(int) = 4,所以這證明gall在低位,all在高位。這就可以解釋為什麼在退出函式f()後,static int all依然保持了原來的值,本質上靜態本地變數all只是披著「本地」外衣的全域性變數。

C語言中的靜態本地變數

c語言中的變數分為全域性變數和區域性變數,全域性變數的作用域是整個函式,宣告週期與整個程式的宣告週期一樣。區域性變數只能在該函式內部訪問和使用,但是如果把乙個區域性變數定義成是靜態的,那就是乙個定義在函式內部的全域性變數了。乙個區域性靜態變數會在程式執行到整個函式的時候才會被建立,然後會一直持續到這...

c語言全域性變數與靜態本地變數

目錄 全域性變數 靜態本地變數 一 定義 定義在函式外面的變數是全域性變數 全域性變數具有全域性的生存期和作用域 他們與任何函式都無關 在任何函式內部都可以使用他們 實驗 int f void int gall 12 乙個全域性變數 也就是全域性變數一改都改 二 全域性變數的初始化 沒有做初始化的全...

c語言小結 全域性變數與靜態本地變數

一.全域性變數 1.定義 定義在函式外面的變數是全域性變數。2.初始化 初始化在main函式之前,沒做初始化的全域性變數會得到0值。3.如果函式內部存在於全域性變數同名的變數,則全域性變數會被隱藏。二.靜態本地變數 1.定義 在本地變數定義時加上static修飾符 2.作用 當函式離開的時候,靜態本...