不看不知道,一看吓一跳之void*、NULL、nullptr之间的区别

3 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

人生就像一杯茶,不会苦一辈子,但总会苦一阵子

很多小伙伴在各种开发场景中经常使用到void*, NULL和nullptr, 但是它们之间的区别确经常被忽视, 今天我就来带着大家看看,它们之间到底有什么样的区别

在C语言中, 一般会这么实现:

#define NULL ((void*)0)

NULL是一个标标准准的宏定义,用来表示不指向任何内存,从以上可以看出,NULL在底层是调用了0, 在C语言中,NULL和0是一样的,但是为了在开发中容易识别,就一般使用NULL当作空指针,0用于数值

在C++中,一般会

#ifndef NULL
	#ifdef __cplusplus
		#define NULL 0
	#else
		#define NULL ((void*)0)
	#endif
#endif

在C++11的新标准中,nullptr来代替(void*)0, NULL只用来代表0,可见,在C++中为了开发方便,进行了更加明确的区分。

总结

void* 代表的任意类型的指针,但是不一定为空
NULL其实就是0值,但是为了语义上区分,用它来代表指针
nullptr是C++11引入的新标准,使用nullptr来指向空指针,NULL专门用来表示数值0(注意,C语言可没有这么说)

PS:
在C语言标准中,明确的进行了规范 :

值为0 的整型常量表达式,或强制(转换)为“void*”类型的此类表达式,称为空指针常量。 当将一个空指针常量赋予一个指针或与指针作比较时,将把该常量转换为指向该类型的指针,这样的指针称为空指针。 空指针在与指向任何对象或函数的指针作比较时保证不会相等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值