nullptr和NULL

在c语言中,NULL既可以是0也可以是(void *)0

但在c++中,这样会给函数重载带来困扰,造成歧义。

于是c++规定,在C++中,NULL只能代表整数0,而(void *)0则有nullptr代表,nullptr只代表空指针,不能表示整数0。其实就是把整数0和(void *)0,分开表示。

在c++中,字符串数组的尾0,也就是'\0'是什么?这个以ascii码就知道。'\0'代表的是整数0,注意,这里的整数0,可和字符0不同,字符0的ascii码是:48。
0 就代表阿拉伯数字0
'\0'是转义字符,代表空字符,一般在字符串结尾作为字符串结束标志
'0'代表字符'0',即ASCii码值为48对应的字符
“0”代表字符串“0”,即这个字符串里只包含一个字符’0‘(当然字符串结尾默认再加一个’\0')

问:为什么C中(void*)0是空指针常量,而C++中不是?

答:因为C语言中任何类型的指针都可以(隐式地)转换为void型,反过来也行,而C++中void型不能隐式地转换为别的类型指针(例如:intp = (void*)0;使用C++编译器编译会报错)。

问:既然C/C++标准中,常数0都可作为空指针常量,为什么不统一使用0?

答:个人觉得由于(void*)0更能体现指针的意义,而常数 0更多的时候是用作整数。因此,C语言中NULL定义选择了(void)0。

全部评论

相关推荐

有担当的灰太狼又在摸鱼:零帧起手查看图片
点赞 评论 收藏
分享
FieldMatching:看成了猪头顾问,不好意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务