-
Null
(空指針)
鎖定
Null是在計算中具有保留的值,用於指示指針不引用有效對象。程序通常使用空指針來表示條件,例如未知長度列表的結尾或未執行某些操作; 這種空指針的使用可以與可空類型和選項類型中的Nothing值進行比較。
空指針不應與未初始化的指針混淆:保證空指針與指向有效對象的任何指針進行比較。但是,根據語言和實現,未初始化的指針可能沒有任何此類保證。它可能與其他有效指針相等; 或者它可能比較等於空指針。它可能在不同的時間做兩件事。
Null表示
空字符通常表示為源代碼字符串字符或字符常量中的轉義序列。在許多語言,這不是一個單獨的轉義序列,而是八進制轉義序列,單個八進制數字為0;因此,‘\0’不能跟隨任何數字0通過7;否則它被解釋為更長的八進制轉義序列的開始。被在使用中發現各種語言的其他轉義序列\000,\x00,\z,或的Unicode表示\u0000。
表示空字符的能力並不總是意味着生成的字符串將被正確解釋,因為許多程序將認為null作為字符串的結尾。因此,鍵入它的能力(在未經檢查的用户輸入的情況下)會創建一個稱為空字節注入的漏洞,並可能導致安全漏洞。
空字符以逗號表示是^@。在Windows上,可以通過按住Ctrl鍵,然後按@(這通常需要同時按下⇧ Shift並按下數字2鍵)。
在文檔中的空字符有時表示為單EM含有字母“NUL” -width符號。在Unicode中,有一個具有相應字符的字符,用於空字符的可視表示,“null”符號,U + 2400(␀),但不要與實際的空字符U + 0000混淆。
[1]
Null定義
NullC
在C中,任何類型的兩個空指針都保證比較相等。預處理器宏NULL被定義為實現定義的空指針常量,它在C99中可以可移植地表示為0隱式或顯式轉換為類型的整數值void*(指向void的指針)。C標準沒有説空指針與指向內存地址0 的指針相同,儘管在實踐中可能就是這種情況。解引用空指針是C中的未定義行為,並且允許符合要求的實現假定任何被解除引用的指針不為空。
實際上,取消引用空指針可能會導致嘗試從未映射的內存中讀取或寫入,從而觸發分段錯誤或內存訪問衝突。這可能表現為程序崩潰,或者轉換為可由程序代碼捕獲的軟件異常。但是,在某些情況下並非如此。例如,在x86實模式中,地址0000:0000是可讀的並且通常也是可寫的,並且取消引用指向該地址的指針是完全有效但通常不需要的操作,可能導致應用程序中的未定義但非崩潰的行為。有時解除引用地址為零的指針是有意的、明確的;例如,用C語言編寫的用於16位實模式x86設備的BIOS代碼可以通過解除引用空指針來寫入機器的物理地址0處的IDT。編譯器還可以優化掉空指針解除引用,避免分段錯誤但引起其他不希望的行為。
/* Define NULL pointer value and the offset() macro */ #ifndef NULL #define NULL ((void *)0) #endif #endif
NullC++
NullSQL
Null在數據庫中表示 不知道的數據,主要有3種意思:
- 知道數據存在,但不知道具體值.
- 不知道數據是否存在.
- 數據不存在.
NULL與0有着扯不斷理還亂的關係,其實不那麼高深。0本身有着一些原生的特性諸如:起始,沒有,正負的分界線,0/1中的0還可以表示否定。NULL正需要這些特性中的一部分。 只需要清楚NULL的本質,並在合理的地方才加以利用而非濫用。
NullMATLAB
語法:z=null(A) %z的列向量為方程組的正交規範基,滿足z‘ x z=I。
z=null(A,'r') %z的列向量是方程A*X=0的有理基。
NullPHP
NULL類型為 php 4 所引進,特殊的NULL值表示一個變量沒有值(NULL類型唯一可能的值就是NULL)。
在下列情況下一個變量被認為是NULL:
- 被賦值為NULL
- 尚未被賦值
- 被unset()
NullJAVA
java中的null是一個關鍵字,通常用來聲明一個空引用,
Object o = null;
表示對象o是一個空引用,如果程序員對它進行了引用,就會拋出一個NullPointerException異常。
Null編碼
在所有現代字符集中,空字符的代碼點值為零。在大多數編碼中,這被轉換為具有零值的單個代碼單元。例如在UTF-8中,它是一個零字節。然而,在修改的UTF-8中,空字符被編碼為兩個字節:0xC0,0x80。這允許值為零的字節(現在不用於任何字符)用作字符串終結符。
- 參考資料
-
- 1. 關於C/C++中的NULL .博客園[引用日期2018-07-13]