複製鏈接
請複製以下鏈接發送給好友

Null

(空指針)

鎖定
Null是在計算中具有保留的值,用於指示指針不引用有效對象。程序通常使用空指針來表示條件,例如未知長度列表的結尾或未執行某些操作; 這種空指針的使用可以與可空類型和選項類型中的Nothing值進行比較。
空指針不應與未初始化的指針混淆:保證空指針與指向有效對象的任何指針進行比較。但是,根據語言和實現,未初始化的指針可能沒有任何此類保證。它可能與其他有效指針相等; 或者它可能比較等於空指針。它可能在不同的時間做兩件事。
中文名
空值
外文名
Null
所屬學科
信息學
含    義
在計算中具有保留的值
使用範圍
用於指示指針不引用有效對象

目錄

  1. 1 表示
  2. 2 定義
  3. C
  1. C++
  2. SQL
  3. MATLAB
  4. PHP
  1. JAVA
  2. 3 編碼

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++

在C ++中,雖然繼承了C的NULL宏,但空指針常量優先解釋為整型0而不是指針值,這極容易導致某些錯誤。故C++ 11引入了一個顯式nullptr常量來代替。

NullSQL

Null在數據庫中表示 不知道的數據,主要有3種意思:
  • 知道數據存在,但不知道具體值.
  • 不知道數據是否存在.
  • 數據不存在.
NULL與0有着扯不斷理還亂的關係,其實不那麼高深。0本身有着一些原生的特性諸如:起始,沒有,正負的分界線,0/1中的0還可以表示否定。NULL正需要這些特性中的一部分。 只需要清楚NULL的本質,並在合理的地方才加以利用而非濫用。

NullMATLAB

函數null用來求解零空間,即滿足方程組A*X=0的解空間。實際上是求出解空間的一組解(基礎解系)。
語法: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。這允許值為零的字節(現在不用於任何字符)用作字符串終結符
參考資料