Null

Null

計算機中表示空值的概念
在計算機中通常表示空值,無結果,或是空集合。
    中文名: 外文名: 适用領域: 所屬學科: 名稱:Null 本 意:空的 計算機表示:空值

指針

Null是一特殊指标值(或是一種對象引用)表示這個指标并不指向任何的對象。這樣的指标稱之為Null指标。有許多實現上是以0(全位為0)代表null指标,多數的CPU以此作為内存空間的底(雖有些系統會使用有符号位址空間(signedaddressspace),并允許為負值)。一旦用null來存取其記億體,許多操作系統會發生意外事件。一些語言使用其他的命名方式來表示這種指标,如Pascal,Ruby以及Lua則使用nil,而VisualBasic使用Nothing。Fortran不支援此一常數,但其屬性(property)可被設定成NULLIFY并由ASSOCIATED函數測試之。

在C語言的頭文件stddefh中,NULL的定義如下:

#ifndefNULL

#ifdef__cplusplus

#defineNULL0

#else

#defineNULL((void*)0)

#endif

#endif

#interfaceNULL0

可見,NULL指針是一個無類型指針,并且值為0。一個指針,擁有2個屬性——地址值和指針類型。兩者的作用是:

1、地址值标識變量的首地址(32位系統下指針的地址值占4字節)。

2、指針類型告訴編譯器,應該怎樣進行接下來的數據訪問(int型數組和float型數組是不同的;數組訪問與結構體訪問也是不同的;等等)。

NULL的出現是一種約定俗成,事實上它不是C語言中的關鍵字;把一個指針賦值為NULL,通常的說法是“将指針懸空”。這樣,指針就無法再進行任何數據訪問了。編程工作中有一類比較容易犯的錯誤——指針地址未進行正确的更新賦值就加以使用,這往往會造成很嚴重的後果(對内存區進行錯誤的塗抹)。所以一個良好的習慣是,當一個指針的工作稍事休息,先把它賦值為NULL,待到再度使用時,重新對其賦值以及進行指針類型轉化。

前面說到“NULL指針無法再進行任何數據訪問”,其實是視編譯器功能而定的。0位置指向的是程序起始,對于不同的編譯器,NULL指針的操作結果是不同的:有些是不準讀寫,有些是隻讀,甚至讀寫都允許。編譯器是人定的。引用網友win_hate在話題“關于NULL的不嚴謹”中的話來說:“如果說有誰不嚴謹了,那必定是讀取0位置的程序員,而不是C。C的設計哲學之一是:‘程序員知道自己在幹什麼——沒有安全帶’”。

疑惑

NULL與0有着扯不斷理還亂的關系,其實不那麼高深。0本身有着一些原生的特性諸如:起始,沒有,正負的分界線,0/1中的0還可以表示否定。NULL正需要這些特性中的一部分。隻需要清楚NULL的本質,并在合理的地方才加以利用而非濫用。

PHP

1、特殊的NULL值表示一個變量沒有值。NULL類型唯一可能的值就是NULL。

注:NULL類型是php4引進的。

2、在下列情況下一個變量被認為是NULL:

被賦值為NULL。

尚未被賦值。

被unset()。

數據庫

Null在數據庫中表示不知道的數據,主要有3種意思:

1、知道數據存在,但不知道具體值。

2、不知道數據是否存在。

3、數據不存在。

JAVA

java中的null是一個關鍵字,通常用來聲明一個空引用。

Objecto=null

表示o對象是一個空引用,如果程序員對它進行了引用,就會抛出一個Null Pointer Exception異常。

函數

函數null用來求解零空間,即滿足方程組A*X=0的解空間。實際上是求出解空間的一組解(基礎解系)。

語法:z=null(A)%z的列向量為方程組的正交規範基,滿足z‘xz=I。

z=null(A,'r')%z的列向量是方程A*X=0的有理基。

Null modem

C++

在C++中NULL直接定義為0,而在C裡,NULL是定義為(void*)0的,這也很好理解,C語言可以隐式轉換,而C++卻是需要顯示的寫出類型轉換的。于是在C++中,就幹脆直接将NULL定義為0。

相關詞條

相關搜索

其它詞條