C语言中,空指针是NULL
,是一个宏
在C++中NULL
似乎也可以用,但是C++中的NULL
其实是有问题的。C++大佬在设计的时候可能没有考虑全面
在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量
但是编译器默认情况下 将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(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
做空指针,就会出现这种情况
//f函数构成函数重载
void f(int)
{
cout<<"f(int)"<<endl;
}
void f(int*)
{
cout<<"f(int*)"<<endl;
}
int main()
{
int* p = NULL;
f(NULL);//调用 f(int)
f(0);// 调用f(int)
f(p);// 调用f(int*)
/* 显然,f(NULL)我们本想调用 f(int*)
但是却调用成了 f(int) */
return 0;
}
所以为了补C++的坑,C++11中引入了nullptr
作为空指针文章来源:https://www.toymoban.com/news/detail-824348.html
注意文章来源地址https://www.toymoban.com/news/detail-824348.html
- 在使用
nullptr
表示指针空值时,不需要包含头文件,因为nullptr
是C++11作为新关键字引入的 - C++11中,
sizeof(nullptr)
与sizeof((void*)0)
所占的字节数相同
到了这里,关于C语言和C++中的空指针区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!