NULL和nullptr的區別

2021-10-21 20:09:42 字數 852 閱讀 9956

欲善其事,必先利其器

首先要知道表示空指標有兩種方法,1.是null 2.是c++11推出的nullptr。那為什麼c/c++有了null,為什麼還要在c++11中推出nullptr呢?

在c語言中,null被定義為:#define null ((void *)0),在核心為巨集定義。首先需要了解巨集定義在程式的中的使用:1.無型別判斷 2.**關鍵字直接替換。

#define null ((void *)0)

int

*p =

null

;char

*str =

null

;

在c++中,null則為這樣定義

#ifdef __cplusplus

#define null 0

#else

#define null ((void *)0)

#endif

即null在代替空指標可表示1.空指標的意思 2.0。這樣就出現了二義性,在一些問題的出現上不易被發現,也不符合程式思想。故在c++11推出nullptr很好的解決這個問題

為解決null代指空指標存在的二義性問題。在c++11推出的nullptr這特一新關鍵字代替空指標,很好解決的上述出現的問題。

即nullptr指向即為空指標,不存在二義性

null在c++中是0的表示,這是因為c++中void*型別不允許隱式轉換成其它型別的,所以之前c++中用0代替空指標,但是在過載整形下會出現上述問題。所以c++11加入了nullptr,可以保證任何情況下的空指標,因此建議以後使用nullptr代替null,以表示空指標。

NULL和nullptr的區別

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 ...

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