大家好,欢迎来到IT知识分享网。
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
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++】函数重载的知识后,我们就能理解为什么需要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的区别✧
NUL
L和nullpt
r都能当作空指针进行使用,他们之间本质的区别是什么呢?
- NULL是一个宏,替换的是0 ,而nullptr是关键字,代表空指针
- 含义不同,nullptr 代表是空指针,NULL 代表整型数字0
- nullptr可以清晰地表达代码的意图,能够避免在类型检查时出现一些歧义问题
nullptr
只能用于指针类型,不能与整数类型混淆~
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●’◡’●) |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128991.html