C語言類型修飾符Const的使用 作者: 時間:2016-11-29 來源:網(wǎng)絡 加入技術交流群 掃碼加入和技術大咖面對面交流海量資料庫查詢 收藏 Const也是應該廣泛的關鍵字,表示后面定義有可能是一個不變的常量,但是跟各種數(shù)據(jù)類型定義組合,能演變出復雜含義.Const 主要有如下應用情況1. 聲明后面是一個常量2. 如果跟指針組合,將形成復雜的組合情況3. 作函數(shù)參數(shù)數(shù)的修飾符.表示不能修改這一參數(shù)的值.主要是指針4. 作函數(shù)返回值, 表示調(diào)用函數(shù)不能修改這一參數(shù)數(shù)的值.主要是指針Const 讓人感到復雜是的,他的位置可以與被修飾的數(shù)據(jù)類型互換!其它的修飾符沒有這樣用法.這樣換一般情況下是等效的,如 const int c1= 5; 等效于 int const c1=5;但是,我說是但是,如果數(shù)據(jù)類型是一個指針,互換一樣位置表示完全不同含義,所以const 這 一個用法經(jīng)常是面試官用來折磨嵌入式C面試者的法寶之一.參看如下定義 int b = 500; const int* a = &b; [1] int const *a = &b; [2] int* const a = &b; [3] const int* const a = &b; [4]這種定義要看 const 的位置來確定他的用法.const位于星號的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;如果const位于星號的 右側,const就是修飾指針本身,即指針本身是常量。因此,[1]和[2]的情況相同,都是指針所指向的內(nèi)容為常量(const放在變量聲明符的位置無 關),這種情況下不允許對指針指向內(nèi)容進行更改操作,如不能*a = 3 ;[3]為指針本身是常量,而指針所指向的內(nèi)容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的;[4]為指針本身和指向的內(nèi)容均為常 量。Const的初始化 Const 在運行時不能修改值,所以只能在定義時進行初始化.作為參數(shù)和返回值的const修飾符 其實,不論是參數(shù)還是返回值,道理都是一樣的,參數(shù)傳入時候和函數(shù)返回的時候,初始化const變量1 修飾參數(shù)的const,如 void fun0(const A* a );表示a的指向內(nèi)容不準修改的. 2 修飾返回值的const,如const A * fun2( );表示a指南內(nèi)容不準備修改 Const 的好處是•關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數(shù)為常量是為了告訴了用戶這個參數(shù)的應用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)• 通過給優(yōu)化器一些附加的信息,使用關鍵字const也許能產(chǎn)生更緊湊的代碼。• 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數(shù),防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現(xiàn)。Const 一大副作用是,在函數(shù)調(diào)用時,你必須要把參數(shù)調(diào)成const 所要求的形式才能被編譯調(diào)用.有時這樣花很大功夫才能做到
評論