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只能转化为任意类型的指针*。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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输入输出文件分析