const char * 和 char const * 和 char * const 区别
我們都用過const?修飾符修飾一個變量,而且我們知道使用const修飾之后,這個變量相當于常量了,他的值在代碼其他部分不能再修改,這對于函數調用時候,防止錯誤的修改原本不應修改的變量起到很大作用,舉個例子,加入A函數調用B函數進行字符串處理,A把字符串的地址傳遞給B,B在處理過程中誤修改了字符串的地址,導致程序出錯,有時候這種錯誤很難找到,這時候我們就可以使用const關鍵字。
??????????????可是對于指針的情況,我們不想修改指針指向的地址,但是允許修改指針指指向的地址中的值,該怎么做呢,可以這么理解這段話,如果char * a = ptr,那么a不能在指向其他的地址,但是對于*a的賦值是可以的。那么如果我們寫const char *或者char const *或者
char * const,哪一個是我們需要的呢?看一段代碼。
1 #include <stdio.h>
2 int main(void)
3 {
4?????char buf[] = "hello world";
5?????char buf2[] = "world hello";
6?????const char* a = buf;
7?????char const* b = buf;
8?????char* const c = buf;
9?????//*a = 'x';
10?????//*b = 't';
11?????*c = 't';
12?????a = buf2;
13?????b = buf2;
14?????//c = buf2;
15?????printf("a is %s\nb is %s\nc is %s \n", a, b, c);
16?????return 0;
17 }
如果我把第8行第9行的注釋去掉,編譯的時候會發生如下錯誤:(編譯環境gcc)
test.c: In function `main':
test.c:9: error: assignment of read-only location
test.c:10: error: assignment of read-only location
如果14行注釋去掉會發生如下錯誤:
test.c: In function `main':
test.c:14: error: assignment of read-only variable `c'
好了我么總結一下,const char *與char const*?效果一樣,都是不允許修改指針指向的地址空間的值,即把值作為常量,而char * const則是不允許修改指針自身,不能再指向其他地方,把指針自己當作常量使用。需要注意的是,使用char * const?定一個常量指針的時候一定記得賦初始值,否則再其他地方就沒法賦值了。
總結
以上是生活随笔為你收集整理的const char * 和 char const * 和 char * const 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微盟合作,重磅推出全免费的H5专业营销平
- 下一篇: 公众平台小程序文档和工具