C++中nullptr和NULL

转自: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只能转化为任意类型的指针*。

 

posted @   lypbendlf  阅读(326)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2018-10-29 PAT 1146 Topological Order[难]
2018-10-29 用tophat和cufflinks分析RNAseq数据[转载]
2018-10-29 PAT 1130 Infix Expression[难][dfs]
2018-10-29 PAT 1118 Birds in Forest [一般]
2018-10-29 生信-cufflinks输入输出文件分析
点击右上角即可分享
微信分享提示