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

2021-08-11 14:15:50 字數 1140 閱讀 5004

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語言中定義了字元變數給他賦值

因為字元變數在記憶體中存放的是其對應的ascii值,比如說字元 a 它的ascii值是97。char ch a printf d ch 輸出版結果就是97了。所以權對於字元變數你也可以這樣理解 它是單位元組的整型變數。所以當然可以對一個字元變數賦值一個1啊。有一個東西叫ascll碼。bai 就是說d...

C語言中可以給指標變數賦值常數嗎

1 申請了空間 在常量區 存放了字串 2 在字串尾加上了 0 3 返回地址,這裡就是返回的地址賦值給了p 字串常量 hello 出現在一個表示式中時,hello 表示式使用的值就是這些字元所儲存的地址 在常量區 而不是這些字元本身。所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給一個字元陣...

關於c語言auto變數和static變數區別

一 主體不同 1 auto變數 是一個c c 語言儲存型別,僅在語句塊內部使用。2 static變數 在計算機程式設計領域指在程式執行前系統就為之靜態分配儲存空間的一類變數。二 作用域範圍不同 1 auto變數 初始化可為任何表示式,其特點是當執行流程進入該語句塊的時候初始化可為任何表示式。2 st...