null是0
nullptr是空指標void
#include void go(int num)
void go(char *p)
void main()
在看例子就比較清晰了:
void go(int num)
void go(void *p)
int main()
結果:
1)在c語言中null代表空指標。
例如:int *i = null;
#define null ((void*)0) 意思是null是void*指標,給int i 賦值的時候隱式轉換為相應型別的指標,但是如果換成c++編譯器編譯的時候會出錯,以為c++是強型別的,void 不能隱式轉換為其他型別。一般的null定義的標頭檔案為:
/* define null pointer value /
#ifndef null
#ifdef __cplusplus
#define null 0
#else / __cplusplus */
#define null ((void )0)
#endif / __cplusplus /
#endif / null */
2)c++中 null代表0
c++ 中有函式過載的概念,會導致呼叫二義性。如
void bar(sometype1 a, sometype2 *b);
void bar(sometype1 a, int i);
bar(a,null)
在c++中,使用0來做為空指標會比使用null來做空指標會讓你更加警覺。
3)c++11中的nullptr
用nullptr來表示空指標
NULL和nullptr的區別
欲善其事,必先利其器 首先要知道表示空指標有兩種方法,1.是null 2.是c 11推出的nullptr。那為什麼c c 有了null,為什麼還要在c 11中推出nullptr呢?在c語言中,null被定義為 define null void 0 在核心為巨集定義。首先需要了解巨集定義在程式的中的使...
NULL和nullptr的區別與聯絡
1 空指標,null pointer,不指向任何物件,在試圖使用乙個指標之前必須要檢查這個指標是不是空指標。2 舉例子 int p1 nullptr 等價於 int p1 0 直接將 p1 初始化為字面值常量 nullptr 或者 字面值常量 0。int p2 null 等價於 int p2 0 i...
C 中NULL和nullptr的區別
看起來null和nullptr都是代表空指標,但是null在過載函式的時候卻匹配到了引數為int的那個版本。這是因為在c 中,null的定義一般是這樣的 ifdef cplusplus define null 0 else define null void 0 endif cplusplus 可以看...