null,NULL,nullptr和””区别

本文介绍了C和C++中null、NULL、0以及空字符串的区别。NULL通常被定义为0,但在C++中使用0作为空指针更安全。C++11引入了nullptr,解决了类型安全问题。空字符串则是一个分配了空间的字符串对象,不同于未分配空间的null。
摘要由CSDN通过智能技术生成

null,NULL,nullptr和””区别

C和C++对大小写敏感,null和NULL是区别对待的。
NULL代表空地址,null只是一个符号。
null和NULL都是字符串,具体看它们宏定义被定义成为什么值。在VS中NULL被定义为0,因为习惯上把宏定义的所有字符都大写,当把NULL它赋值给指针时意思为空,当然也可以把null定义为0。当它们都没定义时就只能叫符号,定义后就有另外的意思,直接把0赋值给指针也行,只要指针指向0就表示空。
NULL在有些编译器中已经赋值为0,不能再用#define定义它,会导致重定义问题。

C的NULL与C++的NULL

在C语言中使用NULL表示空指针,可以写如下代码:

int *i = NULL;

实际上在C语言中,NULL通常被定义为:#define NULL ((void *)0)
也就是说NULL实际上是一个void *的指针,然后把void *指针赋值给int *foo_t *的指针时,隐式转换成相应的类型。
如果换做一个C++编译器来编译是要出错的,因为C++是强类型的,void *不能隐式转换成其他指针类型,所以通常情况下,编译器提供的头文件会这样定义NULL:

#ifdef __cplusplus //简称:cpp c&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值