C語言中const的用法.doc

C語言中const的用法.doc

ID:51686966

大?。?1.95 KB

頁數(shù):6頁

時間:2020-03-15

C語言中const的用法.doc_第1頁
C語言中const的用法.doc_第2頁
C語言中const的用法.doc_第3頁
C語言中const的用法.doc_第4頁
C語言中const的用法.doc_第5頁
資源描述:

《C語言中const的用法.doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫

1、C語言中const的用法?const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。???我們來分情況看語法上它該如何被使用。???1、函數(shù)體內(nèi)修飾局部變量。???例:???voidfunc()???{?????constinta=0;???}???首先,我們先把const這個單詞忽略不看,那么a是一個int類型的局部自動變量,我們給它賦予初始值0。然后再看const.???

2、const作為一個類型限定詞,和int有相同的地位。???constinta;???intconsta;???是等價的。于是此處我們一定要清晰的明白,const修飾的對象是誰,是a,和int沒有關系。const要求他所修飾的對象為常量,不可被改變,不可被賦值,不可作為左值(l-value)。???這樣的寫法也是錯誤的。???constinta;???a=0;???這是一個很常見的使用方式:????constdoublepi=3.14;???在程序的后面如果企圖對pi再次賦值或者修改就會出錯。???然后看一個稍微復雜的例

3、子。???constint*p;???還是先去掉const修飾符號。???注意,下面兩個是等價的。???int*p;???int*p;???其實我們想要說的是,*p是int類型。那么顯然,p就是指向int的指針。???同理???constint*p;???其實等價于???constint(*p);???intconst(*p);???即,*p是常量。也就是說,p指向的數(shù)據(jù)是常量。???于是???p+=8;//合法???*p=3;//非法,p指向的數(shù)據(jù)是常量。???那么如何聲明一個自身是常量指針呢?方法是讓const盡可

4、能的靠近p;???int*constp;???const右面只有p,顯然,它修飾的是p,說明p不可被更改。然后把const去掉,可以看出p是一個指向int形式變量的指針。???于是???p+=8;//非法???*p=3;//合法???再看一個更復雜的例子,它是上面二者的綜合???constint*constp;???說明p自己是常量,且p指向的變量也是常量。???于是???p+=8;//非法???*p=3;//非法???const還有一個作用就是用于修飾常量靜態(tài)字符串。???例如:???constchar*name="

5、David";???如果沒有const,我們可能會在后面有意無意的寫name[4]='x'這樣的語句,這樣會導致對只讀內(nèi)存區(qū)域的賦值,然后程序會立刻異常終止。有了const,這個錯誤就能在程序被編譯的時候就立即檢查出來,這就是const的好處。讓邏輯錯誤在編譯期被發(fā)現(xiàn)。???const還可以用來修飾數(shù)組???constchars[]="David";???與上面有類似的作用。???2、在函數(shù)聲明時修飾參數(shù)???來看實際中的一個例子。???NAME???memmove--copybytestring???LIBRARY?

6、??StandardCLibrary(libc,-lc)???SYNOPSIS???#include???void*???memmove(void*dst,constvoid*src,size_tlen);???這是標準庫中的一個函數(shù),用于按字節(jié)方式復制字符串(內(nèi)存)。它的第一個參數(shù),是將字符串復制到哪里去(dest),是目的地,這段內(nèi)存區(qū)域必須是可寫。它的第二個參數(shù),是要將什么樣的字符串復制出去,我們對這段內(nèi)存區(qū)域只做讀取,不寫。于是,我們站在這個函數(shù)自己的角度來看,src這個指針,它所指向的內(nèi)存

7、內(nèi)所存儲的數(shù)據(jù)在整個函數(shù)執(zhí)行的過程中是不變。于是src所指向的內(nèi)容是常量。于是就需要用const修飾。例如,我們這里這樣使用它。???constchar*s="hello";???charbuf[100];???memmove(buf,s,6);//這里其實應該用strcpy或memcpy更好???如果我們反過來寫,???memmove(s,buf,6);???那么編譯器一定會報錯。事實是我們經(jīng)常會把各種函數(shù)的參數(shù)順序?qū)懛?。事實是編譯器在此時幫了我們大忙。如果編譯器靜悄悄的不報錯,(在函數(shù)聲明處去掉const即可),那

8、么這個程序在運行的時候一定會崩潰。???這里還要說明的一點是在函數(shù)參數(shù)聲明中const一般用來聲明指針而不是變量本身。???例如,上面的size_tlen,在函數(shù)實現(xiàn)的時候可以完全不用更改len的值,那么是否應該把len也聲明為常量呢?可以,可以這么做。我們來分析這么做有什么優(yōu)劣。???如果加了const,那么對于這個函數(shù)的實現(xiàn)者

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。