靜態變量和常量的區別

共同點:

1、static和const在編譯時直接分配內存。


區別:

1、(本質)static是類型引用,const是實例引用。

2、(初始化)靜態變量的初始值必須是一個常量。靜態初始值默認爲0,而常量也默認爲0(嗎?)。

3、(賦值)靜態變量的值在運行時可以更改賦值,而常量的值是不可改變的,運行一開始已經固定,之後修改會報錯。

4、(內存)靜態變量存放在全局數據區中,伴隨着這個程序流程,能將此變量的值保留到下次調用,不過數據過大的靜態變量有可能造成內存泄露。 而const常量算是一個普通的只讀變量,隨函數結束而結束。在C裏,const常量總是會分配內存,位於只讀數據段。在C++,如果const常量在沒有聲明爲extern,那麼就是一個編譯時的符號,不佔用內存。


注意事項:

————————————————————————

C語言中這個例子,爲什麼會報錯?

const int n = 5;   

int a[n];

——————————————————

對於ANSI C編譯器,const變量不等於真正的常量。常量不存在程序中,所以是隻讀的。而“只讀變量”則是在內存中開闢一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾爲只讀變量,可惜再怎麼修飾也不是常量。而ANSI C規定數組定義時維度必須是“常量”,“只讀變量”也是不可以的。


參考文章:

C#中的靜態變量和常量有什麼具體的區別?

面向過程和麪向對象的static關鍵字區別

這個靜態常量會造成內存泄漏嗎?爲什麼

const常量在空間中佔內存嗎

CONST常量是否佔用內存?

發佈了25 篇原創文章 · 獲贊 61 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章