Null(空指針)

本詞條是多義詞,共3個義項
更多義項 ▼ 收起列表 ▲

NULL是在計算中具有保留的值,用於指示指針不引用有效對象。程式通常使用空指針來表示條件,例如未知長度列表的結尾或未執行某些操作; 這種空指針的使用可以與可空類型和選項類型中的Nothing值進行比較。

空指針不應與未初始化的指針混淆:保證空指針與指向有效對象的任何指針進行比較。但是,根據語言和實現,未初始化的指針可能沒有任何此類保證。它可能與其他有效指針相等; 或者它可能比較等於空指針。它可能在不同的時間做兩件事。

基本介紹

  • 中文名:空值
  • 外文名:Null
  • 含義:在計算中具有保留的值
  • 使用範圍:用於指示指針不引用有效對象
表示,定義,C,C++,SQL,MATLAB,PHP,JAVA,編碼,

表示

空字元通常表示為原始碼字元串字元或字元常量中的轉義序列。在許多語言,這不是一個單獨的轉義序列,而是八進制轉義序列,單個八進制數字為0;因此,‘\0’不能跟隨任何數字0通過7;否則它被解釋為更長的八進制轉義序列的開始。被在使用中發現各種語言的其他轉義序列\000,\x00,\z,或的Unicode表示\u0000。
表示空字元的能力並不總是意味著生成的字元串將被正確解釋,因為許多程式將認為null作為字元串的結尾。因此,鍵入它的能力(在未經檢查的用戶輸入的情況下)會創建一個稱為空位元組注入的漏洞,並可能導致安全漏洞
空字元以逗號表示是^@。在Windows上,可以通過按住Ctrl鍵,然後按@(這通常需要同時按下⇧ Shift並按下數字2鍵)。
在文檔中的空字元有時表示為單EM含有字母“NUL” -width符號。在Unicode中,有一個具有相應字元的字元,用於空字元的可視表示,“null”符號,U + 2400(␀),但不要與實際的空字元U + 0000混淆。

定義

C

在C中,任何類型的兩個空指針都保證比較相等。預處理器宏NULL被定義為實現定義的空指針常量,它在C99中可以可移植地表示為0隱式或顯式轉換為類型的整數值void*(指向void的指針)。C標準沒有說空指針與指向記憶體地址0 的指針相同,儘管在實踐中可能就是這種情況。解引用空指針是C中的未定義行為,並且允許符合要求的實現假定任何被解除引用的指針不為空。
實際上,取消引用空指針可能會導致嘗試從未映射的記憶體中讀取或寫入,從而觸發分段錯誤或記憶體訪問衝突。這可能表現為程式崩潰,或者轉換為可由程式代碼捕獲的軟體異常。但是,在某些情況下並非如此。例如,在x86實模式中,地址0000:0000是可讀的並且通常也是可寫的,並且取消引用指向該地址的指針是完全有效但通常不需要的操作,可能導致應用程式中的未定義但非崩潰的行為。有時解除引用地址為零的指針有意的、明確的;例如,用C語言編寫的用於16位實模式x86設備的BIOS代碼可以通過解除引用空指針來寫入機器的物理地址0處的IDT。編譯器還可以最佳化掉空指針解除引用,避免分段錯誤但引起其他不希望的行為。
這通常在頭檔案stddef.h下定義:
/* Define NULL pointer value and the offset() macro */#ifndef NULL#define NULL ((void *)0)#endif#endif

C++

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

SQL

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

MATLAB

函式null用來求解零空間,即滿足方程組A*X=0的解空間。實際上是求出解空間的一組解(基礎解系)。
語法:z=null(A) %z的列向量為方程組的正交規範基,滿足z‘ x z=I。
z=null(A,'r') %z的列向量是方程A*X=0的有理基。

PHP

NULL類型為 php 4 所引進,特殊的NULL值表示一個變數沒有值(NULL類型唯一可能的值就是NULL)。
在下列情況下一個變數被認為是NULL:
  • 被賦值為NULL
  • 尚未被賦值
  • unset()

JAVA

java中的null是一個關鍵字,通常用來聲明一個空引用,
Object o = null;
表示對象o是一個空引用,如果程式設計師對它進行了引用,就會拋出一個NullPointerException異常。

編碼

在所有現代字元集中,空字元的代碼點值為零。在大多數編碼中,這被轉換為具有零值的單個代碼單元。例如在UTF-8中,它是一個零位元組。然而,在修改的UTF-8中,空字元被編碼為兩個位元組:0xC0,0x80。這允許值為零的位元組(現在不用於任何字元)用作字元串終結符。

相關詞條

熱門詞條

聯絡我們