stddef.h或者vcruntime.h里面是這么定義的
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
在C中NULL可以被定義為0或者0L(32位和64位的區(qū)別),或者直接就是由0或者0L轉(zhuǎn)成的成void*。
在C++中尾组,一個(gè)指向空的指針要么是整形0,要么是std::nullptr_t气笙。
歧義總是出現(xiàn)在函數(shù)重載的時(shí)候梁剔,比如下面的兩個(gè)重載函數(shù),如果傳NULL就相當(dāng)于傳0哟旗,會(huì)調(diào)用第一個(gè)print贩据,所以高版本c++引入了nullptr的概念,建議有nullptr的不用在用NULL了闸餐。
void Print(int a)
{
cout << "int" << endl;
cout << a << endl;
}
void Print(char* a)
{
if (nullptr == NULL)
{
cout << "true" << endl;
}
cout << "char" << endl;
cout << &a << endl;
}