NULL和nullptr的區別

2021-09-01 03:02:31 字數 980 閱讀 9009

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 可以看...