中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

目錄

創(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既可以加在變量前、類型后,又可以加在類型前。如:

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)

外貿網站建設
都昌县| 四平市| 新巴尔虎右旗| 永泰县| 贡山| 阿图什市| 普安县| 泉州市| 灵寿县| 汤原县| 武夷山市| 渝北区| 福州市| 石棉县| 上饶市| 保亭| 礼泉县| 平舆县| 大连市| 郧西县| 宁晋县| 石嘴山市| 嘉兴市| 叶城县| 顺平县| 延安市| 博湖县| 嘉禾县| 饶河县| 海淀区| 泰州市| 三江| 绥江县| 长顺县| 易门县| 郧西县| 启东市| 民勤县| 古浪县| 河北区| 来凤县|