C語言中static變數的賦值問題

2021-08-11 14:15:49 字數 1140 閱讀 9552

1樓:小夏在深圳

static int a = 0; // 執行期時初始化一次, 下次再呼叫時, 不進行初始化工作如下:

printf(「%d」,a);

a++;

int main()

staticlocalvar(); // 第一次呼叫, 輸出a=0

staticlocalvar(); // 第二次呼叫, 記憶了第一次退出時的值, 輸出a=1

return 0;

擴充套件資料

1、static對全域性變數的修飾,可以認為是限制了只能是本檔案引用此變數。有的程式是由好多.c檔案構成。

彼此可以互相引用變數,但加入static修飾之後,只能被本檔案中函式引用此變數。

2、static對棧變數的修飾,可以認為棧變數的生命週期延長到程式執行結束時。一般來說,棧變數的生命週期由os管理,在退棧的過程中,棧變數的生命也就結束。

3、但加入static修飾之後,變數已經不再儲存在棧中,而是和全域性變數一起儲存。同時,離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用, 而且儲存了前次被呼叫後留下的值。

2樓:風清安有綢

如果是賦值初始值,那麼在程式執行初始就已經初始化了。

和全域性變數是一樣的。

但體現出來作用是在第一次呼叫。

至於後續賦值,隨便什麼時候都可以

想賦值的時候就賦值咯。

3樓:匿名使用者

呵呵,這就是靜態變數的功能啊,靜態變數只被初始化1次,所以不管幾次呼叫,它都不會再執行int c=3這行啦。而c的值就是你之前運算的結果

4樓:小魚

static定義的變數只有第一次被賦值,這之後會自然使用之前留下來的值了,不會每次都按3初始化的。:-)

5樓:匿名使用者

static變數與普通變數的區別就在於此

每次呼叫fun()函式,

函式開始時,初始化普通變數、分配記憶體,函式結束後,普通變數所佔用的記憶體就被釋放

而對於static變數,只是第一次呼叫時會初始化,函式體結束之後,static變數佔用的記憶體會被保留,從而變數的值不會發生變化,下次呼叫該函式,也不會重新初始化,而是保留上次的值

c語言中某檔案裡定義的static變數那麼另

不能,但用extern可以 在c語言中,一個檔案中定義的 全域性變數,在另一個檔案中能用嗎?全域性變數extern可以 copy在其他源程式中使用 全域性變bai量dustatic只能在本程式中使用。zhi 全域性變數是使用相同的記憶體塊在整個dao類中儲存一個值。全域性變數既可以是某物件函式建立,...

C語言中對變數賦值0x是什麼意思

c語言中對變數賦值0x是以十六進位制數作為變數的值進行運算的。一般用來表示記憶體地址內的。舉例說明 容 定義x int x 0x23 這句話的意思跟定義成int x 35一樣的。編譯器在接收到0x23時就把它當做十六進位制數來處理。表示0x後面的值為十六進位制 c語言中0x20是什麼意思?這是一種整...

c語言中變數指標輸出問題,C語言中變數指標輸出問題

這和printf用 s的規則相關。首先ps是一個指向字元型資料的指標 printf用 s修飾輸出時需要提供一個指標,這個指標指向的資料是字元型的,但printf將按照字串的規則來進行輸出,也就是輸出完這個指標指向的字元後,自動將指標加1,並判斷指向的字元是否為0,否則將輸出直至指向的資料為0為止,或...