why靜態變數只能被初始化一次?

2021-08-10 05:13:34 字數 496 閱讀 8036

函式1

int fun()  

當fun函式被呼叫時,i會一直++

函式2

int fun()  

當函式被呼叫時只會return 1;

因為:

1、這兩個變數i同名但是不同意義

靜態變數:作用在全域性,生命週期和程式一樣,i在記憶體開闢的空間不會隨著函式呼叫而被銷毀;每次呼叫都會找到之前的i,所以一直++。

變數i:作用在區域性,生命週期和函式一樣,i在記憶體開闢的空間會隨著函式被呼叫而被銷毀;每次呼叫,i在重新分配的棧幀中再次分配空間,並賦初值為0;所以只會返回1。

靜態變數的必須初始化,如果沒有顯示初始化,則系統自動初始化為0 ,』0』或者其他。當變數重複時,編譯器忽略了重複初始化的**。

根本原因:

靜態變數在全域性開闢的空間 i ,在其空間上方有乙個標誌域–0。程式執行時檢查標誌域,若為0,則賦值;反之,則不執行。

靜態變數初始化順序

1.begin a a a a,from a的物件 a a,a.num01 0 a a,b.num02 0 a a,b.instance a null end a a begin a a a a,from a的物件 a a,a.num01 1 a a,b.num02 1 a a,b.instance...

final非靜態變數初始化

size medium final變數可以在任何可以被始化的地方被始化,具體應該是建構函式之前或建構函式中,但只能被初始化一次.一旦被初始化後就不能再次賦 值 重新指向其它物件 作為成員變數一定要顯式初始化,而作為臨時變數則可以只定義不初始化 當然也不能引用 即使是作為乙個類中的成員變數,也還可以在...

變數只能在定義時被初始化

在這種情況下,計算機會將一些閒置的記憶體,它將把價值居住在該記憶體位置的法庭,它將列印值。但它會列印什麼價值?答案是 誰知道!每次執行該程式時,答案都會改變。當作者冉本程式用visual studio 2013編譯,std cout印製價值7177728一次,和5277592下。如果你想自己執行這個...