转自:https://www.cnblogs.com/mrlsx/p/5510496.html
1.NULL为0值,nullptr是指针对象
NULL是一个宏定义,c中NULL为(void*)0,而c++中NULL为整数0:
//C语言中NULL定义 #define NULL (void*)0 //c++中将NULL定义为整数0 #define NULL 0
在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针,见下例:
int *p=0;//指向空指针 cout<<(p==NULL); #输出:1 int *p=NULL; cout<<(p==NULL); #输出:1 #以上两个结果可以看出,NULL在定义指针时是和0等价的。 int *p=nullptr; cout<<(p==NULL); #输出:1
但是下面的重载会出现问题
void fun(int i){cout<<"1";}; void fun(char *p){cout<<"2";}; int main() { fun(NULL); fun(nullptr); } #报错: error: call of overloaded 'fun(NULL)' is ambiguous #如果注释掉这一句的话,是可以正常输出2的
上面的实验说明了NULL既可以转换为int也可以*,而nullptr只能转化为任意类型的指针*。