相傳在C的世界里出現(xiàn)了一件極品裝備(鐵布衫)const、它的出現(xiàn),讓天下的所有刺客和黑客都聞風(fēng)喪膽,在它的保護(hù)下,所有的變量都可以保存的完好無(wú)損const是constant的縮寫(xiě),表示??菔癄€、恒定不變、一旦相伴、永不變心。只要一個(gè)變量前面用const來(lái)修飾,就意味著該變量的數(shù)據(jù)可以被訪問(wèn),不能被修改。其實(shí)我們還可以叫它readonly.
雖然理解起const來(lái)相對(duì)比較容易理解,但是const不僅僅可以用來(lái)修辭基本類型,它還可以經(jīng)常用來(lái)修辭一些構(gòu)造類型和指針及其參合體,如數(shù)組、指針、指針數(shù)組、結(jié)構(gòu)體數(shù)組、結(jié)構(gòu)體指針數(shù)組一旦和這些復(fù)雜的類型結(jié)合起來(lái)還是有一定的迷惑性的.
例如:
(1) const int a = 10;
(2) int const a = 10;
(3) const int a[10] = {1,2,3, 4, 5, 6, 7, 8, 9, 10};
(4) const int *p;
(5) int * const p;
(6) const struct devices dev[5];
(7) struct devices const * dev[5];
看到上面的例子,我相信很多人都會(huì)倒吸一口冷氣。話不多說(shuō)直接看辨識(shí)技巧
將類型去掉;
看const修飾誰(shuí),誰(shuí)就擁有鐵布衫,誰(shuí)的值就不能被修改,是readonly(1)去掉類型 int 變成“const a = 10”,a 擁有了鐵布衫,a的值是不變的(2)去掉類型 int 變成“const a = 10”,a 擁有了鐵布衫,a的值是不變的,這兩個(gè)的效果一樣(3)去掉類型 int 變成“const a[10]”, a[10]擁有了鐵布衫,a數(shù)組里面的值是不變的(4)去掉類型 int 變成“const *p”,*p擁有鐵布衫,p所指的空間里面的值是不變的(5) 去掉類型 int * 變成 “const p”,指針變量p擁有了鐵布衫,指針變量p的值不變,也就是說(shuō)p不能再指向其他地址了,但是p所指向的空間的值可變(6)去掉類型struct devices變成“const dev[5]”,dev[5]擁有了鐵布衫,dev[5]數(shù)組的值不變(7)這是一個(gè)devices結(jié)構(gòu)體類型的指針數(shù)組,它擁有5個(gè)devices結(jié)構(gòu)體類型的指針,每個(gè)指針指向一個(gè)devices結(jié)構(gòu)體,const修飾*dev[5],去掉類型struct devices變成“const *dev[5]”,指針數(shù)組*dev[5]擁有了鐵布衫,指針數(shù)組dev中每個(gè)元素指向的空間里的值不變。
作用總結(jié):
首先、const關(guān)鍵字修飾變量名的時(shí)候,把這個(gè)變量變?yōu)槭且粋€(gè)只讀變量,這里的只讀不是全局?jǐn)?shù)據(jù)區(qū)的or段。它所修飾的變量原來(lái)是在哪個(gè)區(qū)域,const修飾之后它還在那個(gè)區(qū)域。比如修飾一個(gè)局部變量const int num = 5;那么這個(gè)局部變量還是存在??臻g上。它本身對(duì)應(yīng)的內(nèi)存空間還是可以變的。但是不可以通過(guò)num去修改它。如果定義一個(gè)指針指向num的地址。則可以改變num的值。其次、const可以修飾形參(保護(hù)形參不被修改),在這一點(diǎn)上,站在實(shí)現(xiàn)者的角度,const可以防止函數(shù)對(duì)實(shí)參修改帶來(lái)的問(wèn)題。站在調(diào)用者的角度來(lái)說(shuō),它對(duì)于實(shí)參只能訪問(wèn),不能修改。所以、合理地使用關(guān)鍵字const可以使編譯器很自然地保護(hù)那些不希望被改變的參數(shù),防止其被無(wú)意的代碼修改。簡(jiǎn)而言之,這樣可以減少bug的出現(xiàn)。
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7615瀏覽量
137872 -
CONST
+關(guān)注
關(guān)注
0文章
45瀏覽量
8194
原文標(biāo)題:在C的世界里出現(xiàn)了一件極品裝備(鐵布衫)const
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論