/***const是什么?***/
在C語(yǔ)言中const是一個(gè)關(guān)鍵字,const字面的意思是“恒定的,不變的”,其主要的作用是const定義的變量,但又相當(dāng)于常量,其值不允許被改變。
值得注意的是:
1)const修飾的變量的生存周期為其定義到整個(gè)程序結(jié)束運(yùn)行,不管是全局變量還是局部變量。
2)對(duì)于const變量在初始化的時(shí)候就需要進(jìn)行按我們的期望進(jìn)行賦值,其他時(shí)候修改則會(huì)造成語(yǔ)法錯(cuò)誤。
3)對(duì)于const特性跟編譯器相關(guān),不過(guò)大部分是一致的!
4)const是在編譯的時(shí)候編譯器進(jìn)行的一些處理!
/***如何使用const?***/
一、C語(yǔ)言中const修飾的變量占用內(nèi)存
我們先看加兩個(gè)例子:
下圖C語(yǔ)言
下圖C++語(yǔ)言
我們編譯會(huì)發(fā)現(xiàn)C語(yǔ)言無(wú)法通過(guò),主要是原因是我們定義const變量n并不是常量所以編譯無(wú)法通過(guò)。所以用const定義的變量?jī)H僅為只讀變量,同樣需要占用內(nèi)存。而C++可以通過(guò),而它相對(duì)比較復(fù)雜,這里不在展開(kāi)描述!
二、const注釋函數(shù)參數(shù)和返回值
我們通過(guò)修飾函數(shù)形參來(lái)保護(hù)傳入的參數(shù)不被意外修改,有利于程序穩(wěn)定性。我們一般不會(huì)用const修飾值傳遞,因?yàn)橹祩鬟f是一個(gè)賦值的過(guò)程,在函數(shù)內(nèi)部修改不會(huì)改變其值,所以不是很有意義;一般用const注釋指針傳遞,防止內(nèi)部修改導(dǎo)致外部變化,比如:void sFuc(const char *des,const char *src);這樣就防止了des和src值的意外修改。
修飾返回值一般用得比較少,采用const修飾返回值一般也不用于值傳遞,而是多用于指針傳遞!
三、const變量能通過(guò)指針修改嗎?
我們通過(guò)下面兩個(gè)例子:
我們會(huì)發(fā)現(xiàn)兩者的區(qū)別const一個(gè)注釋的全局變量一個(gè)注釋的局部變量,我們編譯都能通過(guò),不過(guò)使用全部變量的程序運(yùn)行會(huì)報(bào)段錯(cuò)誤,而局部變量的能夠過(guò)得正確結(jié)果。對(duì)于通過(guò)指針修改const的值是一種與編譯器有關(guān)的行為,我們認(rèn)為可以用指針修改堆棧上的局部變量,而全部變量const修飾以后為只讀區(qū)域,如果程序訪(fǎng)問(wèn)則會(huì)導(dǎo)致異常!
四、const注釋指針的終極奧義
我們把const處把右側(cè)的語(yǔ)句括起來(lái),去掉數(shù)據(jù)類(lèi)型,括起來(lái)的內(nèi)容是什么就是什么不能被修改。
如:
1)const int *pVar=&addr;根據(jù)上面的方法括起來(lái)的內(nèi)容(* pVar)表示的是指針的內(nèi)容,那么不能執(zhí)行*pVar內(nèi)容的修改,比如說(shuō)*pVar=123;則編譯會(huì)報(bào)錯(cuò)。不過(guò)可以修改指針的地址,比如pVar = &addr2;這樣是可以修改的并且我們?cè)俅卧L(fǎng)問(wèn)pVar的內(nèi)容則變成了addr2的內(nèi)容了。
2)同樣intconst *pVar=&addr;跟上面是一樣的處理辦法。
3)int* const pVar=&addr;這個(gè)剛剛與前面的相反,其括起來(lái)的為(pVar)所以值能使用*pVar作為左值,不能修改pVar所指向的地址。
4)對(duì)于constint* constpVar=&addr則都不可進(jìn)行修改!只能作為右值可讀。
5)我們同樣可以擴(kuò)展下對(duì)于二級(jí)指針
constchar*const*constp全部限定為只讀,都不可以改寫(xiě),如果一個(gè)開(kāi)放對(duì)應(yīng)的就可以被修改!
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5083文章
19131瀏覽量
305551 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7605瀏覽量
136938 -
編譯器
+關(guān)注
關(guān)注
1文章
1634瀏覽量
49144
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論