日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言再学习 -- NUL和NULL的区别

發(fā)布時間:2025/3/15 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言再学习 -- NUL和NULL的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

NUL 是ASCII 字符集中 '\0' 字符的名字,它的字節(jié)模式為全 0。NULL 指一個其值為 0 的指針。它們都是整型值,其值也相同,所以它們可以互換使用。然而,你還是應該使用適當?shù)某A?#xff0c;因為它能告訴閱讀程序的人不僅使用 0 這個值,而且告訴他使用這個值的目的。

符號 NULL 在頭文件 staio.h 中定義。另一方面,并不存在預定義的符號 NUL,所以如果你想使用它而不是字符常量 '\0',你必須自行定義。


NULL是一個宏,它在幾個標準頭文件中定義,0是一個整型常量,'\0'是一個字符常量,而NUL是一個字符常量的名字。這幾個術語都不可互換。
1、NULL用于表示什么也不指向,也就是空指針((void *)0)
2、0可以被用于任何地方,它是表示各種類型零值的符號并且編譯器會挑出它
3、'\0'應該只被用于結束字符串
4、NUL沒有被定義于C和C++,它不應該被使用,除非你自己定義它,像:#define nul '\0'


空指針:值是NULL , NULL可能是0,0L 或 (void*)0?

C 語言的定義,每一個指針類型,是一種特殊的值,空指針。 這與所有其他指針值區(qū)分開來,“保證不平等比作一個指針指向任何對象或函數(shù)”。也就是說,一個空指針應該明確,它不是任何對象或函數(shù)的地址。取地址運算符 & 永遠不會產(chǎn)生一個空指針,也不會成功的調(diào)用 malloc。(malloc返回一個空指針則分配內(nèi)存失敗,這是一個典型的使用空指針,作為“特殊”指針值與其他意義,通常“不分配”或“沒有指向任何地方”)。
一個空指針概念上不同于未初始化的指針。一個空指針是已知不指向任何對象或函數(shù),未初始化的指針可能再任何地方。
正如上面提到的,有一個空指針對于每個指針類型,和內(nèi)部不同類型的空指針的值可能會有所不同。雖然程序員不需要知道內(nèi)部值,編譯器必須告知哪種類型的空指針是必需的,所以,如果有必要,需要區(qū)別對待。


空指針的用法?:
用空指針終止對遞歸數(shù)據(jù)結構的間接引用?
用空指針作函數(shù)調(diào)用失敗時的返回值?
用空指針作警戒值?


注意,當我們將 0 賦值給一個指針變量時,絕對不能企圖使用該指針所指向的內(nèi)存中存儲的內(nèi)容。例如:

下面的寫法是完全合法的:

#include <stdio.h> #include <string.h>int main (void) {char p[20];if (p == (char*)0){printf ("1111111111\n");}printf ("222222222222\n");return 0; } 輸出結果: 222222222222 但是如果寫成這樣就非法了:

#include <stdio.h> #include <string.h>int main (void) {char p[20];if (strcmp (p, (char*)0) == 0){printf ("111111111111\n");}return 0; } 輸出結果: 段錯誤 (核心已轉儲) #include <stdio.h> #include <string.h>int main (void) {char *p = NULL;printf ("%s\n", p);return 0; } 輸出結果: 段錯誤 (核心已轉儲) 這部分可參看:C語言再學習 -- 段錯誤(核心已轉儲)

NULL 指針并不指向任何對象。因此,除非是用于賦值或比較運算,出于其他任何目的的使用NULL指針都是非法的。

總結

以上是生活随笔為你收集整理的C语言再学习 -- NUL和NULL的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。