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