日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

const char * 和 char const * 和 char * const 区别

發布時間:2025/3/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 const char * 和 char const * 和 char * const 区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們都用過const?修飾符修飾一個變量,而且我們知道使用const修飾之后,這個變量相當于常量了,他的值在代碼其他部分不能再修改,這對于函數調用時候,防止錯誤的修改原本不應修改的變量起到很大作用,舉個例子,加入A函數調用B函數進行字符串處理,A把字符串的地址傳遞給BB在處理過程中誤修改了字符串的地址,導致程序出錯,有時候這種錯誤很難找到,這時候我們就可以使用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 区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。