当前位置: 代码网 > it编程>编程语言>C/C++ > 【C/C++】关键字nullptr详解 | NULL与nullptr的区别

【C/C++】关键字nullptr详解 | NULL与nullptr的区别

2024年07月28日 C/C++ 我要评论
在C++中,引入了一个新的关键字——``nullptr``,用来代替旧版本的`NULL`,在函数重载中,宏替换NULL和整型0造成歧义 需要nullptr代表空指针而非整型0关键字nullptr提高了程序的类型安全性和可读性,与NULL宏定义相比,具有更强的可靠性和扩展性。三、NULL和nullptr的区别✧NULL和nullptr都能当作空指针进行使用,他们之间本质的区别是什么呢?NULL是一个宏,替换的是0 ,而nullptr是关键字,代表空指

在这里插入图片描述

c语言内容💖:

专栏:

【c语言】全部知识点总结


一、nullptr介绍✧

在c++中,引入了一个新的关键字——nullptr,用来代替旧版本的null

nullptr用于代表空指针,对于指针初始化时使用如下:

	int* p1 = nullptr;   //关键字,代表空指针

之前用指针指向的new出来的堆空间,在回收时就可以将指针指向nullptr

	int** p = new int*;
	free(p);
	p=nullptr;

既然nullptr与之前的null使用的方法一致,为什么还要引入nullptr关键字?

在这里插入图片描述

二、为什么需要nullptr ?

在学过【c/c++】函数重载的知识后,我们就能理解为什么需要nullptr关键字用来代替null宏定义

先来写一个函数重载的例子:

这两个函数的函数名相同,参数列表不同(一个是整型参数,一个是指针参数),构成函数重载
void fun9(int a)
{
	cout << __funcsig__ << endl;
}
void fun9(int* p)
{
	cout << __funcsig__ << endl;
}

此时我们在主函数中调用fun9函数,传参为空指针null

int main()
{
	fun9(null);	
	return 0;
}

查看运行结果:

在这里插入图片描述

输出的结果是void fun9(int a)函数

在这里插入图片描述

此时我不想调用指向整型的函数,而是要调用指向指针的函数,可传参又为空指针null,该如何实现呢?


函数重载中提到过函数的函数的局部变量声明,可以实现调用指向指针的函数

在这里插入图片描述


我们来探究一下空指针null调用了void fun9(int a)(传参为整型)函数的原因

在这里插入图片描述

null为宏定义,其本质是整数0,这也就是在函数调用中,把null当作0调用了函数,而不是当作一个空指针 的原因。

(define宏替换知识点:【c语言】详解宏定义#define

因此我们需要一个代表空指针的关键字,而不是对整型0的宏替换

在这里插入图片描述

c++11中引入了空指针nullptr,专门用来代表空指针

使用nullptr成功地达到了调用传参为指针函数的目的:

在这里插入图片描述

总结为:

  • 在函数重载中,宏替换null整型0造成歧义 需要nullptr代表空指针而非整型0

  • 关键字nullptr提高了程序的类型安全性和可读性,与null宏定义相比,具有更强的可靠性和扩展性。

三、null和nullptr的区别✧

null和nullptr都能当作空指针进行使用,他们之间本质的区别是什么呢?

  • null是一个,替换的是0 ,而nullptr是关键字,代表空指针

  • 含义不同,nullptr 代表是空指针,null 代表整型数字0

  • nullptr可以清晰地表达代码的意图,能够避免在类型检查时出现一些歧义问题

nullptr只能用于指针类型,不能与整数类型混淆~


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com