C語言const限定詞基本用法

它限定一個變量不允許被改變,產生靜態作用。使用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 *pchar 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 *pchar 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’

發佈了39 篇原創文章 · 獲贊 70 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章