這篇文章主要對C語言中const關鍵字的用法進行了詳細的分析介紹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

什么是const?
const 在實際編程中用得並不多,const 是 constant 的縮寫,意思是“恆定不變的”!它是定義只讀變量的關鍵字,或者說 const 是定義常變量的關鍵字。
說 const 定義的是變量,但又相當於常量;說它定義的是常量,但又有變量的屬性,所以叫常變量。用 const 定義常變量的方法很簡單,就在通常定義變量時前面加 const 即可,如:
const int a=10;
const 和變量類型 int 可以互換位置,二者是等價的,即上條語句等價於:
int const a=10;
關鍵字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關鍵字有所幫助。

最后,如果你也想成為程序員,想要快速掌握編程,趕緊加入學習企鵝圈子!
里面有資深專業軟件開發工程師,在線解答你的所有疑惑~編程語言入門“so easy”
編程學習書籍:

編程學習視頻:
