C語言中,空指針是NULL
,是一個宏
在C++中NULL
似乎也可以用,但是C++中的NULL
其實是有問題的。C++大佬在設(shè)計的時候可能沒有考慮全面
在C++98中,字面常量0既可以是一個整形數(shù)字,也可以是無類型的指針(void*)常量
但是編譯器默認情況下 將其看成是一個整形常量,如果要將其按照指針方式來使用,必須對其進行強轉(zhuǎn)(void *)0。
看一下在C++中NULL
的定義
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
可以看到,NULL
在C++中其實就是 0
在C語言中才是(void*)0
,即空指針
所以C++如果用NULL
做空指針,就會出現(xiàn)這種情況
//f函數(shù)構(gòu)成函數(shù)重載
void f(int)
{
cout<<"f(int)"<<endl;
}
void f(int*)
{
cout<<"f(int*)"<<endl;
}
int main()
{
int* p = NULL;
f(NULL);//調(diào)用 f(int)
f(0);// 調(diào)用f(int)
f(p);// 調(diào)用f(int*)
/* 顯然,f(NULL)我們本想調(diào)用 f(int*)
但是卻調(diào)用成了 f(int) */
return 0;
}
所以為了補C++的坑,C++11中引入了nullptr
作為空指針文章來源:http://www.zghlxwxcb.cn/news/detail-824348.html
注意文章來源地址http://www.zghlxwxcb.cn/news/detail-824348.html
- 在使用
nullptr
表示指針空值時,不需要包含頭文件,因為nullptr
是C++11作為新關(guān)鍵字引入的 - C++11中,
sizeof(nullptr)
與sizeof((void*)0)
所占的字節(jié)數(shù)相同
到了這里,關(guān)于C語言和C++中的空指針區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!