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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

c+语言+null,C/C++语言中NULL、'\0’和0的区别

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c+语言+null,C/C++语言中NULL、'\0’和0的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NULL、'\0'和0的值是一樣的,都是0,不過它們的表現形式不一樣:

1.?NULL: 即空指針,不過在C和C++中并不一樣。在VS 2013的庫文件string.h中可以看到如果定義。

1 /* Define NULL pointer value */

2 #ifndef NULL

3 #ifdef __cplusplus

4 #define NULL 0

5 #else /* __cplusplus */

6 #define NULL ((void *)0)

7 #endif /* __cplusplus */

8 #endif /* NULL */

可以看出,在C中,NULL表示的是指向0的指針,而在C++中,NULL就直接跟0一樣了。但有一點值得注意的是:在C語言中,“當常量0處于應該作為指針使用的上下文中時,它就作為空指針使用”(《征服C指針》)。例如,下邊的指針定義和初始化是沒問題的(即沒警告也沒報錯):

int * p = 0; /* C language */

但如果定義成如下的樣子呢?

int * p = 3; /* C language */

很明顯,這樣子做是有問題的。這一句可以編譯通過,但在VS 2013中有這樣的警告:“warning C4047: “初始化”:“int *”與“int”的間接級別不同”。

我又試了一下這一句在C++中的情況,VS 2013就直接報錯了:“?‘int’ 類型的值不能用于初始化 ‘int *’ 類型的實體”。

因此,為了防止混淆,在C/C++中,當要將一個指針賦值為空指針的時候,都應該將它賦為NULL,而不是0。

2.?‘\0’:‘\0’是一個“空字符”常量,它表示一個字符串的結束,它的ASCII碼值為0。注意它與空格' '(ASCII碼值為32)及'0'(ASCII碼值為48)不一樣的。

在《征服C指針》中,作者還提到了一種錯誤的程序寫法:使用NULL來結束字符串。例如下邊的程序就是有問題的:

char str[4] = { '1', '2', '3', NULL }; /* C language */

在VS 2013中,會的這樣的警告:“warning C4047: “初始化”:“char”與“void *”的間接級別不同”。而在C++中,這一句是沒有問題的。

還有一點值得注意,如下的程序在C/C++中都是沒有問題的:

char str[4] = { '1', '2', '3', 0 }; / C/C++ language */

但為了防止混淆,在C/C++中,當要給一個字符串添加結束標志時,都應該用‘\0’而不是NULL或0。

綜上所述,當我們要置一個指針為空時,應該用NULL,當我們要給一個字符串添加結束標志時,應該用‘\0’。

總結

以上是生活随笔為你收集整理的c+语言+null,C/C++语言中NULL、'\0’和0的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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