它限定一個變量不允許被改變,產生靜態作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一定幫助。
1. 作用:防止誤操作只讀內存
像這種"Hello"
字符串是隻讀的,操作其內存是不允許的。
char *str = "Hello";
str[2]='X';
printf("%s\n",str);
編譯通過,運行出錯。
要是加上const
限定詞,下列代碼編譯時候就會有錯誤提醒,相當於編譯錯誤檢查。
const char *str = "Hello";
str[2]='X';
printf("%s\n",str);
2. const char *p 、char const *p 和 char * const p 的區別
const char *p和 char const *p :限定的是*p,p指向的內容不可變,p本身可變。
char * const p:限定的是p,p指向的內容可變,p本身不可變。
1. 無限定詞
char str[6] = "Hello";
char *p = str;
*p='X'; // 指向的內容可修改
*++p = 'y'; // 指針位置可修改
printf("%s\n",str);
輸出
Xyllo
2. const char *p: p可變,指向的內容不可變。
const char *p
和 char const *p
一樣效果。
修改指針位置:正常
char str[6] = "Hello";
const char *p = str;
++p;
printf("%s\n",p);
輸出
ello
修改指向的內容:出錯
char str[6] = "Hello";
const char *p = str;
*p='X';
printf("%s\n",str);
編譯出錯:error: assignment of read-only location ‘*p’
3. char* const p: p指向位置不可變,內容可變。
修改指針位置:錯誤
char str[6] = "Hello";
char * const p = str;
++p;
printf("%s\n",p);
編譯出錯:error: increment of read-only variable ‘p’
修改指向的內容:正常
char str[6] = "Hello";
char * const p = str;
*p='X';
printf("%s\n",str);
輸出
Xello
4. char const * const p & const char * const p:全限定都不可修改
char str[6] = "Hello";
char const * const p = str;
++p; // 編譯出錯
*p = 'X'; // 編譯出錯
printf("%s\n",p);
編譯出錯:
- error: increment of read-only variable ‘p’
- error: assignment of read-only location ‘*p’