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

2022-06-05 08:06:08 字數 3282 閱讀 7784

這篇文章主要對c語言中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關鍵字有所幫助。

最後,如果你也想成為程式設計師,想要快速掌握程式設計,趕緊加入學習企鵝圈子

!程式設計學習書籍:

C語言 const關鍵字用法

const 是constant的縮寫,是恆定不變的意思,也常翻譯為常量 常數等。很不幸,正是因為這一點,很多人都認為被const修飾的值是常量。這是不精確的,精確的說應該是唯讀的變數,其值在編譯時不能被使用,因為編譯器在編譯時不知道其儲存的內容。那麼這個const 關鍵字有什麼用處和意義呢?cons...

C語言中const關鍵字的用法

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

C語言中const關鍵字的用法

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