C語(yǔ)言const詳解-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)長(zhǎng)期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為盂縣企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),盂縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

一、什么是const

二、使用const的優(yōu)點(diǎn)

三、const的用法

(1)修飾局部變量

(2)常量指針與指針常量

三、修飾函數(shù)的參數(shù)

(1)防止修改指針指向的內(nèi)容

(2)防止修改指針?biāo)赶虻牡刂?/p>

四、修飾函數(shù)的返回值

五、修飾全局變量

六、簡(jiǎn)單筆試題


一、什么是const

如果我們想定義這樣一種變量,使它的值不能被改變,在整個(gè)作用域中都保持固定,那可以使用const關(guān)鍵字對(duì)變量加以限定。

不過(guò)要注意,被const所修飾的變量,其值是可以通過(guò)指針被修改的!

有一種說(shuō)法是const定義的是變量為常變量。

被const修飾的是變量,而修飾之后又相當(dāng)于常量,但還有變量的屬性,所以叫常變量。

其用法非常簡(jiǎn)單,只需在定義變量時(shí)前加const即可。

const既可以加在變量前、類型后,又可以加在類型前。如:

const int i = 0;
int const a = 0;

這兩者是等價(jià)的。

二、使用const的優(yōu)點(diǎn)

1、預(yù)編譯指令僅是對(duì)值的簡(jiǎn)單替換,不能對(duì)類型進(jìn)行檢查,相比之下,被const修飾的變量有自己的類型;

2、const可以保護(hù)被修飾的變量,防止意外修改,增強(qiáng)程序的健壯性;

3、可以避免不必要的內(nèi)存分配,編譯器通常不為被const修飾的變量分配存儲(chǔ)空間,而是將它們保存在符號(hào)表中,這使得它成為一個(gè)編譯期間的常量,沒(méi)有了存儲(chǔ)與讀內(nèi)存的操作,它的效率很高。

4、可以進(jìn)行類型檢查

三、const的用法 (1)修飾局部變量
const char* str="fdsafdsa";

如果沒(méi)有const的修飾,我們可能會(huì)在后面有意無(wú)意的寫str[4]=’x’這樣的語(yǔ)句,這樣會(huì)導(dǎo)致對(duì)只讀內(nèi)存區(qū)域的賦值,然后程序會(huì)立刻異常終止。有了const,這個(gè)錯(cuò)誤就能在程序被編譯的時(shí)候就立即檢查出來(lái),這就是const的好處。讓邏輯錯(cuò)誤在編譯期被發(fā)現(xiàn)。

(2)常量指針與指針常量

常量指針是指針指向的內(nèi)容是常量,可以有以下兩種定義方式。

const int* n;
int const* n;

可以發(fā)現(xiàn),無(wú)論是在int前還是后,它們均位于*之前。

警告:

1.常量指針只是不能通過(guò)指針改變變量的值,還可以以其他方式來(lái)改變變量的值。

int a=5;
const int* n=&a;
a=6;

2.指針本身可以被改變!常量指針可以指向其他的地址。

int a=5;
int b=6;
const int* n=&a;
n=&b;

3.指針常量是指指針本身是個(gè)常量,不能指向其他地址。

int*const n;

4.指針常量指向的地址不能改變,但是地址中保存的數(shù)值是可以改變的,可以通過(guò)其他指向該地址的指針來(lái)修改。

int a=5;
int*p=&a;
int* const n=&a;
*p=8;

區(qū)分常量指針和指針常量的關(guān)鍵就在于*的位置,以*為分界線,如果const在星號(hào)的左邊,則為常量指針,如果const在星號(hào)的右邊則為指針常量。

5.指向常量的常指針是以上兩種的結(jié)合,指針指向的位置不能改變并且也不能通過(guò)這個(gè)指針改變變量的值,但是依然可以通過(guò)其他的普通指針改變變量的值。

const int* const p;
三、修飾函數(shù)的參數(shù) (1)防止修改指針指向的內(nèi)容
void StringCopy(char*strDestination, const char*strSource);

其中strSource是輸入?yún)?shù),strDestination是輸出參數(shù)。給strSource加上const修飾后,如果函數(shù)體內(nèi)的語(yǔ)句試圖通過(guò)解引用的方式改動(dòng)strSource的內(nèi)容,編譯器將指出錯(cuò)誤。

(2)防止修改指針?biāo)赶虻牡刂?pre>void swap ( int* const p1 , int* const p2 );

指針p1和指針p2指向的地址都不能修改。

四、修飾函數(shù)的返回值

如果給以“指針傳遞”方式的函數(shù)返回值加 const 修飾,那么函數(shù)返回值(即指針)的內(nèi)容不能被修改,該返回值只能被賦給加const 修飾的同類型指針。

例如函數(shù)

const char* GetString(void);

用法是

const char*str = GetString();
五、修飾全局變量

全局變量的作用域是整個(gè)文件,我們應(yīng)該盡量避免使用全局變量,因?yàn)橐坏┯幸粋€(gè)函數(shù)改變了全局變量的值,它也會(huì)影響到其他引用這個(gè)變量的函數(shù),導(dǎo)致除了bug后很難發(fā)現(xiàn),如果一定要用全局變量,我們應(yīng)該盡量的使用const修飾符進(jìn)行修飾,這樣方式不必要的以為修改,使用的方法與局部變量是相同的。

六、簡(jiǎn)單筆試題

有關(guān)const的面試題、筆試題太多了,很精彩,可以自行查找。這里僅用2015年360的筆試題講解。

牛客網(wǎng)鏈接:語(yǔ)言中哪一種形式聲明了一個(gè)指向char類型變量的指針p,p的__??途W(wǎng) (nowcoder.com)

語(yǔ)言中哪一種形式聲明了一個(gè)指向char類型變量的指針p,p的值不可修改,但p指向的變量值可修改?

A.const char *p
B.char const *p
C.char*const p
D.const char *const p

【正確答案】C
【解析】const 限定一個(gè)數(shù)據(jù)為只讀屬性。
1.const char p; 限定變量 p 為只讀。
2.const char *p; p 為一個(gè)指向 char 類型的指針,const 限定 p 指向的數(shù)據(jù)為只讀。所以 *p 的值不能被修改,而指針變量 p 本身的值可以被修改。
3.char * const p; 限定此指針變量為只讀,所以 p 的值不能被修改,而 *p 的值可以被修改。
4.const char *const p; 兩者皆限定為只讀,不能修改。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

名稱欄目:C語(yǔ)言const詳解-創(chuàng)新互聯(lián)
本文路徑:http://bm7419.com/article42/cecsec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站導(dǎo)航、網(wǎng)站改版企業(yè)建站、定制網(wǎng)站、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)