NULL,nullptr的區別與聯絡

2021-08-08 06:58:08 字數 873 閱讀 5506

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)

呼叫**也很快可能忽略過去了,因為我們用的是null空指標啊,應該是呼叫的void bar(sometype1 a, sometype2 *b)這個過載函式啊。實際上null在c++中就是0,寫null這個反而會讓你沒那麼警覺,因為null不夠「明顯」,而這裡如果是使用0來表示空指標,那就會夠「明顯」,因為0是空指標,它更是乙個整形常量。

在c++中,使用0來做為空指標會比使用null來做空指標會讓你更加警覺。

3)c++11中的nullptr

用nullptr來表示空指標

寧波鼻部整形

NULL nullptr 0剪不斷理還亂的關係

先看下null的定義,在stddef.h中 usr lib gcc x86 64 redhat linux 4.8.2 include stddef.h 在c中,null定義為 void 0 在c 中,一般用null表示空指標,即指標的0值。例如 int p null 正確 int p 0 正確 在...

與 的區別? 與 的區別?

相同點 和 都是表示與的邏輯運算子,其運算結果一致 不同點 邏輯與 當兩邊的表示式都為true的時候,整個運算結果才為true,否則為false。短路與 當第乙個表示式的值為false的時候,則不再計算第二個表示式 注意 還可以做位運算子,當表示式不是boolean型別的時候 例項1 public ...

this 與this的區別

this 與this的區別 相信很多剛接觸jquery的人,很多都會對 this 和this的區別模糊不清,那麼這兩者有什麼區別呢?首先來看看jquery中的 這個符號,實際上這個符號在jquery中相當於jquery 即 this jquery 也就是說,這樣可以返回乙個jquery物件。那麼,當...