目錄
創(chuàng)新互聯(lián)長期為上千余家客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為盂縣企業(yè)提供專業(yè)的成都網站制作、成都網站設計、外貿營銷網站建設,盂縣網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發(fā)。一、什么是const
二、使用const的優(yōu)點
三、const的用法
(1)修飾局部變量
(2)常量指針與指針常量
三、修飾函數(shù)的參數(shù)
(1)防止修改指針指向的內容
(2)防止修改指針所指向的地址
四、修飾函數(shù)的返回值
五、修飾全局變量
六、簡單筆試題
如果我們想定義這樣一種變量,使它的值不能被改變,在整個作用域中都保持固定,那可以使用const
關鍵字對變量加以限定。
不過要注意,被const所修飾的變量,其值是可以通過指針被修改的!
有一種說法是const定義的是變量為常變量。
被const修飾的是變量,而修飾之后又相當于常量,但還有變量的屬性,所以叫常變量。
其用法非常簡單,只需在定義變量時前加const即可。
const既可以加在變量前、類型后,又可以加在類型前。如:
const int i = 0;
int const a = 0;
這兩者是等價的。
二、使用const的優(yōu)點1、預編譯指令僅是對值的簡單替換,不能對類型進行檢查,相比之下,被const修飾的變量有自己的類型;
2、const可以保護被修飾的變量,防止意外修改,增強程序的健壯性;
3、可以避免不必要的內存分配,編譯器通常不為被const修飾的變量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,它的效率很高。
4、可以進行類型檢查
三、const的用法 (1)修飾局部變量const char* str="fdsafdsa";
如果沒有const的修飾,我們可能會在后面有意無意的寫str[4]=’x’這樣的語句,這樣會導致對只讀內存區(qū)域的賦值,然后程序會立刻異常終止。有了const,這個錯誤就能在程序被編譯的時候就立即檢查出來,這就是const的好處。讓邏輯錯誤在編譯期被發(fā)現(xiàn)。
(2)常量指針與指針常量常量指針是指針指向的內容是常量,可以有以下兩種定義方式。
const int* n;
int const* n;
可以發(fā)現(xiàn),無論是在int前還是后,它們均位于*之前。
警告:
1.常量指針只是不能通過指針改變變量的值,還可以以其他方式來改變變量的值。
int a=5;
const int* n=&a;
a=6;
2.指針本身可以被改變!常量指針可以指向其他的地址。
int a=5;
int b=6;
const int* n=&a;
n=&b;
3.指針常量是指指針本身是個常量,不能指向其他地址。
int*const n;
4.指針常量指向的地址不能改變,但是地址中保存的數(shù)值是可以改變的,可以通過其他指向該地址的指針來修改。
int a=5;
int*p=&a;
int* const n=&a;
*p=8;
區(qū)分常量指針和指針常量的關鍵就在于*的位置,以*為分界線,如果const在星號的左邊,則為常量指針,如果const在星號的右邊則為指針常量。
5.指向常量的常指針是以上兩種的結合,指針指向的位置不能改變并且也不能通過這個指針改變變量的值,但是依然可以通過其他的普通指針改變變量的值。
const int* const p;
三、修飾函數(shù)的參數(shù)
(1)防止修改指針指向的內容void StringCopy(char*strDestination, const char*strSource);
其中strSource是輸入參數(shù),strDestination是輸出參數(shù)。給strSource加上const修飾后,如果函數(shù)體內的語句試圖通過解引用的方式改動strSource的內容,編譯器將指出錯誤。
(2)防止修改指針所指向的地址void swap ( int* const p1 , int* const p2 );
指針p1和指針p2指向的地址都不能修改。
四、修飾函數(shù)的返回值如果給以“指針傳遞”方式的函數(shù)返回值加 const 修飾,那么函數(shù)返回值(即指針)的內容不能被修改,該返回值只能被賦給加const 修飾的同類型指針。
例如函數(shù)
const char* GetString(void);
用法是
const char*str = GetString();
五、修飾全局變量全局變量的作用域是整個文件,我們應該盡量避免使用全局變量,因為一旦有一個函數(shù)改變了全局變量的值,它也會影響到其他引用這個變量的函數(shù),導致除了bug后很難發(fā)現(xiàn),如果一定要用全局變量,我們應該盡量的使用const修飾符進行修飾,這樣方式不必要的以為修改,使用的方法與局部變量是相同的。
六、簡單筆試題有關const的面試題、筆試題太多了,很精彩,可以自行查找。這里僅用2015年360的筆試題講解。
牛客網鏈接:語言中哪一種形式聲明了一個指向char類型變量的指針p,p的__??途W (nowcoder.com)
語言中哪一種形式聲明了一個指向char類型變量的指針p,p的值不可修改,但p指向的變量值可修改?
A.const char *p
B.char const *p
C.char*const p
D.const char *const p 【正確答案】C 【解析】const 限定一個數(shù)據(jù)為只讀屬性。 1.const char p; 限定變量 p 為只讀。 2.const char *p; p 為一個指向 char 類型的指針,const 限定 p 指向的數(shù)據(jù)為只讀。所以 *p 的值不能被修改,而指針變量 p 本身的值可以被修改。 3.char * const p; 限定此指針變量為只讀,所以 p 的值不能被修改,而 *p 的值可以被修改。 4.const char *const p; 兩者皆限定為只讀,不能修改。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
名稱欄目:C語言const詳解-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article42/cecsec.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站維護、網站導航、網站改版、企業(yè)建站、定制網站、網站營銷
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)