關於空指標

2021-08-15 02:30:24 字數 743 閱讀 1105

空指標是什麼

c中空意味著它與任何物件與函式的指標值都不相等也就是說我們並不能通過&來得到空位址(其實這在數學邏輯上是矛盾的,但是我們暫且這麼認為)

所以空指標在概念上不同於未初始化的指標,因為未初始化的指標可以指向任何地方。

每種指標型別都有其空指標,不同空指標的內部表示也不盡相同,儘管程式設計師並不知道內部值。編譯器知道就行了。

怎樣獲得乙個空指標

根據定義,在指標上下文的常數0會在編譯時轉換為空指標。也就是說,在初始化的賦值或比較的時候,如果一邊是指標型別的值或者表示式,編譯器可以確定右側的零為空指標值。也就有了

char *p = 0;

以上**合法

但是,傳入函式的引數不一定會被當作指標環境,因而編譯器可能不能識別未加修飾的0,在函式中呼叫上下文中需要明確的型別轉換。

在unix中 需要  (char *)0這樣寫才合法(許多unix手冊在呼叫excel()上都錯了)。

另外提一句if(p)這種形式並沒有什麼不必要的爭論,編譯器都會把它當作if(p!=0).

null是什麼

null不過是標頭檔案用巨集定義的乙個空指標常量。

還有null只能用於指標常數。

我還是要插一嘴,有人問null定義成#define null ((char *)0)不就可以想函式傳入不加轉換的null了麼。(md你腦洞怎麼這麼多)

顯然這樣是不行滴,有的機器對於空有不同資料型別的定義,這樣定義對於字元是沒有問題的

file *fp = null則會失敗

關於空指標

臭名昭著的空指標到底是什麼?語言定義中說明,每一種指標型別都有乙個特殊值 空指標 它與同型別的其它所有指標值都不相同,它 與任何物件或函式的指標值都不相等 也就是說,取位址操作符 永遠也不能得到空指標,同樣對 malloc 的成功呼叫也不會返回空指標,如果失敗,malloc 的確返回空指標,這是空指...

關於空指標異常問題

一直都覺得空指標異常很好改,但是今天竟然調了一上午,鬱悶吶,因此開始總結教訓 首先svo是前端所傳的物件,判斷是否為空,如果為空則進行例項化 if svo null string project num svo.getprojectnum if project num.equals root nod...

c 判斷指標為空 關於C中指標為空的判斷

在看c中指標是否為空的判斷說明時,出現了分歧。if ptr 如果 p 非空,則完成 if ptr 如果 p 為空,則完成 而我在林銳博士 c程式設計規範 一文中看到,為了和bool型別的判斷區分,他建議 判斷指標使用 if null ptr or if null ptr 這種方式。但是,按照 c 之...