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&