const 是c++中常用的型別修飾符,常型別是指使用型別修飾符const說明的型別,常
型別的變數或物件的值是不能被更新的。
const的作用:
(1)可以定義常量: 即const int a=5;
a就是乙個被const修飾的常量,它在程式執行期間是無法被改變的!
(2)保護被修飾的東西: 例如乙個函式的首部為void fn(const int* p)
p是乙個指標變數,函式fn接收到的是乙個變數的位址,而由於在位址傳參時我們可以通過位址改變原本的變數值,而我們如果並不想改變他,我們就可以使用const修飾,這樣就可以保護其不被更改!
(3)可以很方便的調整引數:const和巨集定義一樣,我們可以通過更改const修飾的值,很方便的使程式得出不一樣的結果,大大提高了程式的通用性!
const的使用:
(1)const定義常量:
它的含義是使用const修飾的變數在程式執行期間是無法被改變的。
例如const int a=5;
a在程式執行過程中不允許被改變。
(2)在使用指標時使用const:
const修飾一級指標
const char p
限定變數p為唯讀。這樣如p=2這樣的賦值操作就是錯誤的。
const char *p
p為乙個指向char型資料的指標,const只限定了p所指向的物件無法被改變,這樣說來,p=&a或p++等操作都是合法的,而如果是 p=1,這樣的操作就是錯的,因為這樣子是妄圖修改常量。
3.char * const p
const在p前面,這樣子表示指標變數p是被const修飾的,p是不能被更改的,所以&p=a,p++等操作都是不合法的,但是p=1這種操作是合法的。
4.const char * const p
char前面與p前面全部都有const,所以p是不能更改的,p也是不能被更改的。
const修飾二級指標
1.const char **p
p是乙個指向指標的指標,而const在char前面,說明const只修飾最終的物件,即**p=5是非法的,而p=&p1或者p++這些操作都是合法的。
2.const char * const *p
const修飾了char 也修飾了*p,所以只有p++這種操作是正確的,像**p=3或者 *p=&p1這種操作都是錯誤的。
const char* const* const p
const修飾了char 也修飾了* 也修飾了p所以p++,**p=3或者 *p=&p1這種操作都是錯誤的。全部關於p,*p,**p的操作都是非法的。
(3)在函式引數中使用const:
char* strcopy(char* dest,const char* src)
int main()
這是乙個可以實現鏈式表示式的字串複製函式
我們可以看到這個函式的函式首部為char* strcopy(char* dest,const char* src)
因為我們需要傳遞字串,所以需要傳遞他的位址,但我們又不想改變字串的原本的值,所以使用了const修飾了對應的字串指標,如此一來他的值就無法被改變。
const 用法小結
const用法小結 關於c 中的const關鍵字的用法非常靈活,而使用const將大大改善程式的健壯性。1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在...
const用法詳解
物件導向是c 的重要特性.但是c 在c的基礎上新增加的幾點優化也是很耀眼的 就const直接可以取代c中的 define 以下幾點很重要,學不好後果也也很嚴重 1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安...
const基礎用法
一 const基礎 如果const關鍵字不涉及到指標,我們很好理解,下面是涉及到指標的情況 int b 500 const int a b 1 int const a b 2 int const a b 3 const int const a b 4 如果你能區分出上述四種情況,那麼,恭喜你,你已經...