1.什么是空指针
空指针就是void*
2.为什么使用NULL表示空指针
C++中NULL定义为0:
#define NULL 0
在C++中void*不能隐式转换为其他类型,所以使用0(即NULL)代替控制指针。
为了说明NULL代替空指针存在的问题,下面看一个例子:
#include <iostream>
void go(int num)
{
std::cout << "go num" << std::endl;
}
void go(void *p)
{
std::cout << "go p" << std::endl;
}
void main()
{
void *p = NULL;
go(p);//go p
go(NULL);//go num
go(nullptr);//go p
system("pause");
}
上面代码运行结果如下:
类似go函数重载了空指针和整型的情形下,NULL并不能表示空指针,就会出现错误。
3.nullptr
C++11引入nullptr表示空指针,即nullptr就是void*。
这样就可以保证在任何情况下,nullptr都可以表示空指针。
4.结论:
我们应该使用nullptr表示空指针,而不用NULL表示空指针。