新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C語言類型修飾符Const的使用

C語言類型修飾符Const的使用

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

關(guān)鍵詞: C語言類型修飾符Cons

評論


技術(shù)專區(qū)

關(guān)閉