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

这篇具有很好参考价值的文章主要介绍了【C/C++】关键字nullptr详解 | NULL与nullptr的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

c语言内容💖:

专栏: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++,c++,c语言,开发语言,笔记,学习

二、为什么需要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;
}

查看运行结果:

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

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

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

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


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

nullptr,C/C++,c++,c语言,开发语言,笔记,学习


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

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

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

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

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

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

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

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

nullptr,C/C++,c++,c语言,开发语言,笔记,学习

总结为:

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

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

三、NULL和nullptr的区别✧

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

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

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

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

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


nullptr,C/C++,c++,c语言,开发语言,笔记,学习文章来源地址https://www.toymoban.com/news/detail-783569.html

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

到了这里,关于【C/C++】关键字nullptr详解 | NULL与nullptr的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL having关键字详解、与where的区别

    1.1、作用 对查询的数据进行筛选 1.2、having产生的原因 使用where对查询的数据进行筛选时,where子句中无法使用聚合函数,所以引出having 1.3、having使用语法 having单独使用(不与group by一起使用,在Oracle中会报错),单独使用时,大部分场合与where相同 having与grou

    2023年04月21日
    浏览(33)
  • 【C++入门】auto关键字(C++11) + 指针空值nullptr(C++11)

    👦个人主页:@Weraphael ✍🏻作者简介:目前学习C++和算法 ✈️专栏:C++航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 本章是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。 随

    2024年02月04日
    浏览(82)
  • [C语言]关键字解析(二) typedef和#define以及区别

    typedef是type define的缩写,之前看一本书上说,也许这个更应该叫typerename,我个人是比较认同的这个观点的.因为这个只是给 已有的类型重新定义了一个方便使用的别名 ,并没有产生新的数据类型。说直白点typedef就是 类型重命名 在实际应用中typedef主要有如下

    2024年02月10日
    浏览(34)
  • 【C++深入浅出】初识C++下篇(auto关键字、范围for、nullptr指针)

    目录 一. 前言 二. auto 2.1 auto的引入 2.2 auto简介 2.3 auto的使用细则 2.4 auto不能推导的场景 三. 基于范围的for循环(C++11) 3.1 范围for的语法 3.2 范围for的原理 3.3 范围for的使用条件 四. 指针空值nullptr(C++11)         上期我们介绍了c++新增的两个重要语法:引用和内联函数,今

    2024年02月11日
    浏览(60)
  • 【C++】内联函数、auto关键字、基于范围的for循环、指针空值nullptr

    👀樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.内联函数 1.1概念 1.2特性 2.auto 2.1类型别名思考 2.2auto简介 2.3auto的使用细则 2.4auto不能使

    2024年02月07日
    浏览(45)
  • 【与C++的邂逅之旅】--- 内联函数 && auto关键字 && 基于范围的for循环 && nullptr

    关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 博主专栏: 💡 与C++的邂逅之旅 💡 数据结构之旅 上篇我们了解了函数重载和引用,我们继续学习有关C++的一些小语法— 内联函数,auto,基于范围的for循环以及 nullptr,请放心食用 ~ 这个函数不陌生吧,我们在实现排序算法时经常

    2024年04月09日
    浏览(80)
  • 【C语言】static关键字详解

    目录 1.static是什么? 2.static修饰的对象是? 3.static修饰后改变了什么? 4.static修饰操作演示 (1) 局部变量 如果加了static修饰局部变量i会怎么样? 全局区(静态区) (2) 全局变量 如果给全局变量加上了static修饰呢? 二者区别?  这样用有什么用? (3) 函数 5.总结

    2024年02月10日
    浏览(42)
  • C语言之static关键字详解

     前言: 一、几个概念 1.变量 2.局部变量和全局变量 3.变量的作用域 4.变量的生命周期 二、static的作用 三、static修饰局部变量 四、static修饰全局变量  五、static修饰函数  写在最后:            static,英文意思静态的,作为C语言常用中一

    2024年02月03日
    浏览(42)
  • 【C++】语法小课堂 --- auto关键字 & typeid查看实际类型 & 范围for循环 & 空指针nullptr

    🚩 在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么? C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器, auto定义的

    2024年02月13日
    浏览(40)
  • 【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)

    目录 前言 函数重载 概念 重载函数的条件 C++支持重载函数的原理--名字修饰 引用 概念 特性 常引用(const引用) 使用场景 传值,传引用效率比较 引用和指针的区别 内联函数 概念 特性 auto(C++11) auto简介 auto的使用规则 指针空值nullptr(C++11) C++98中的指针空值 结语

    2024年04月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包