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