我將從我所知道的開始:C標準要求NULL(以某種方式)指向無效的指針,理論上它不指向任何東西。因此,例如malloc()
應該永遠不會返回一個NULL指針,如果發生錯誤。我知道NULL通常表示爲((void*)0)
,並且編譯器將此指針零轉換爲實現定義的地址,該地址符合符號空指針的理論要求(意思是地址本身無法訪問)。C的限制地址/指針
現在讓我們假設我需要另一個NULL(讓它稱爲NULL2),它具有與NULL相同的確切特性,但它也可以與NULL(NULL!= NULL2)區分開來。從我所瞭解的內存(這不是很多)中,NULL指針通常指向一段內存中禁止訪問的地址。所以我的意思是,通常有一整段內存不僅僅限於一個地址。所以我們可以說我將NULL2定義爲NULL + 1(我知道這可能會讓你感到畏縮或者可能會有點堵嘴),理論上NULL2(就像我剛剛定義的那樣)也是無法訪問的(就像NULL無法訪問一樣)?
我希望答案完全是平臺特定的,所以例子幾乎是我所期待的。但更普遍的是,還有其他的指針地址被ISO-C標準定義爲無效(或不可達或其他),與NULL相同。所有地址無效(或限制)以及無效的原因的一般性解釋也會有所幫助。如果你覺得有必要問我「爲什麼要愛上帝,我需要這樣做」,我的回答是我不需要做任何事情;它只是一個假設的問題。
將段落中的文字。 –
請閱讀[問]。 – OldProgrammer
好吧,假設,如果你想要這個,你應該創建你自己的語言與這個特定的行爲。在C中你不能,而且如果你不能代表不同的東西,你就不應該定義兩種不同類型的無效指針 –