在c中,使用null表示空指標,實際上,null被定義為:
#define null ((void*) 0)
其中((void *) 0)表示對』0』進行強制轉換,轉換為乙個void型別的指標,用於表示空指標。即null表示乙個指向位址』0』的void指標,將null賦予其他型別的指標時,會進行乙個隱式轉換,將void型別的指標轉換為相應的型別。
在c++中,禁止了c中指標的這種隱式轉換,所以,在c++環境中,對null的定義為(在cstdlib中):
#ifndef null
#ifdef __cplusplus
#define null 0
#else
#define null ((void *)0)
#endif
#endif
也就是說,在c++中的null,直接被定義為了int型別的 0 ,因此,以下**:
int *p = null;
和
int *p = 0;
是等價的,一樣表示的是指標int型別的指標p指向 位址號為 0 的位址,即乙個空位址。但是需要注意到,很多c++經典教材在c++11出現前,都強烈建議在建立空指標時,與其使用null,不如直接使用 0 。
究其原因主要是,null本質上就是int型別的0,可以將null給int型別的變數賦值,可以參與數字計算等,最主要的原因在於以下,
void myfunc(int *);
void myfunc(int);
以上假設函式過載中宣告,如果我們在主函式中呼叫該函式,
myfunc(null);
就會產生歧義,編譯器不能得知該呼叫哪個過載。
為了避免以上的情況,c++11的特性中新增了nullptr,nullptr用於特指空指標,其型別為指標型別,不能與整數進行任何運算,從而避免了很多意外情況的發生,所以在c++11後,如果需要指定空指標,應該使用nullptr而不是null。
空指標總結
1 nullpointerexception由runtimeexception派生出來,是乙個執行級別的異常。意思是說可能會在執行的時候才會被丟擲,而且需要看這樣的執行級別異常是否會導致你的業務邏輯中斷。2 空指標異常發生在物件為空,但是引用這個物件的方法。例如 string s null 物件s為...
c c 中空指標,空指標常量,NULL
如何是乙個指標變數成為空指標 如果 p 是乙個指標變數,則 p 0 p 0l p 0 p 3 3 p 0 17 中的任何一種賦值操作之後 對於 c 來說還可以是 p void 0 p 都成為乙個空指標,由系統保證空指標不指向任何實際的物件或者函式。null 是乙個標準規定的巨集定義,用來表示空指標常...
C C 函式指標總結
函式指標指向某種特定型別,函式的型別由其引數及返回型別共同決定,與函式名無關。舉例如下 int add int nleft,int nright 函式定義該函式型別為int int,int 要想宣告乙個指向該類函式的指標,只需用指標替換函式名即可 int pf int int 未初始化則pf可指向i...