詳解C語言中const關鍵字的用法_C 語言

來源:互聯網
上載者:User

關鍵字const用來定義常量,如果一個變數被const修飾,那麼它的值就不能再被改變,我想一定有人有這樣的疑問,C語言中不是有#define嗎,幹嘛還要用const呢,我想事物的存在一定有它自己的道理,所以說const的存在一定有它的合理性,與先行編譯指令相比,const修飾符有以下的優點

1、先行編譯指令只是對值進行簡單的替換,不能進行類型檢查

2、可以保護被修飾的東西,防止意外修改,增強程式的健壯性

3、編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

下面我們從幾個方面來說一下const的用法:

一、修飾局部變數

const int n=5;
int const n=5;
這兩種寫法是一樣的,都是表示變數n的值不能被改變了,需要注意的是,用const修飾變數時,一定要給變臉初始化,否則之後就不能再進行賦值了。

接下來看看const用於修飾常量靜態字串,例如:

const char* str="fdsafdsa";
如果沒有const的修飾,我們可能會在後面有意無意的寫str[4]='x'這樣的語句,這樣會導致對唯讀記憶體地區的賦值,然後程式會立刻異常終止。有了const,這個錯誤就能在程式被編譯的時候就立即檢查出來,這就是const的好處。讓邏輯錯誤在編譯期被發現。

二、常量指標與指標常量

常量指標是指標指向的內容是常量,可以有一下兩種定義方式。

const int * n;
int const * n;
需要注意的是一下兩點:

1、常量指標說的是不能通過這個指標改變變數的值,但是還是可以通過其他的引用來改變變數的值的。

int a=5;
const int* n=&a;
a=6;
2、常量指標指向的值不能改變,但是這並不是意味著指標本身不能改變,常量指標可以指向其他的地址。

int a=5;
int b=6;
const int* n=&a;
n=&b;
指標常量是指指標本身是個常量,不能在指向其他的地址,寫法如下:

int *const n;
需要注意的是,指標常量指向的地址不能改變,但是地址中儲存的數值是可以改變的,可以通過其他指向改地址的指標來修改。

int a=5;
int *p=&a;
int* const n=&a;
*p=8;
區分常量指標和指標常量的關鍵就在於星號的位置,我們以星號為分界線,如果const在星號的左邊,則為常量指標,如果const在星號的右邊則為指標常量。如果我們將星號讀作‘指標',將const讀作‘常量'的話,內容正好符合。int const * n;是常量指標,int *const n;是指標常量。

指向常量的常指標

是以上兩種的結合,指標指向的位置不能改變並且也不能通過這個指標改變變數的值,但是依然可以通過其他的普通指標改變變數的值。

const int* const p;
三、修飾函數的參數

根據常量指標與指標常量,const修飾函數的參數也是分為三種情況

1、防止修改指標指向的內容

void StringCopy(char *strDestination, const char *strSource);
其中 strSource 是輸入參數,strDestination 是輸出參數。給 strSource 加上 const 修飾後,如果函數體內的語句試圖改動 strSource 的內容,編譯器將指出錯誤。

2、防止修改指標指向的地址

void swap ( int * const p1 , int * const p2 )
指標p1和指標p2指向的地址都不能修改。

3、以上兩種的結合。

四、修飾函數的傳回值

如果給以“指標傳遞”方式的函數傳回值加 const 修飾,那麼函數傳回值(即指標)的內容不能被修改,該傳回值只能被賦給加const 修飾的同類型指標。
例如函數

const char * GetString(void);
如下語句將出現編譯錯誤:

char *str = GetString();
正確的用法是

const char *str = GetString();
五、修飾全域變數

全域變數的範圍是整個檔案,我們應該盡量避免使用全域變數,以為一旦有一個函數改變了全域變數的值,它也會影響到其他引用這個變數的函數,導致除了bug後很難發現,如果一定要用全域變數,我們應該盡量的使用const修飾符進行修飾,這樣方式不必要的以為修改,使用的方法與局部變數是相同的。

以上就是const關鍵字的全部用法希望對大家靈活運用const關鍵字有所協助

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.