0
在我们的程序中,单纯一个0,在不同的类型中有着不同的意思
- 0,是一个
空字符常量
,他在ASCII中的序号就是0,是一个字符串的结束标准 - ‘0’,表示一个
字符'0'
,他在ASCII中的序号是48 - “0”,表示一个
字符串"0"
,他的大小是2,因为在他的末尾还需要有一个0
来表示字符串结束的标志
NULL
NULL
就是我们在程序中经常见到的空指针
,他所在的头文件是stddef.h
,他所指向的地址是0x00 00 00 00
这个地址默认是一个不能被访问的地址,只要被访问就会报错
但是NULL并不是我们所见到的几个基本类型的数据,他在底层中是一个宏
,但是对于C语言和C++语言而言,他却是有着不同的定义
C语言中
#undef NULL
#define NULL ((void *)0)
在C语言中,NULL被宏定义为((void *)0)
C++中
- vs编译器中的定义
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else /* __cplusplus */
#define NULL ((void *)0)
#endif /* __cplusplus */
#endif /* NULL */
可以看到,C++为了向下兼容C语言的一些语法,在NULL的定义中,加入了判断
- 要是C程序,则进行
#define NULL ((void *)0)
- 要是C++程序,则进行
#define NULL 0
利用
__cplusplus
判断程序的类型
如果一段代码是需要针对C++编写的, 可以使用该宏进行条件编译。__cplusplus的值是为了表示C++的版本。__cplusplus的类型是long int
void