NULL实际是一个宏,在头文件stddef.h中是这么定义的:
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
从定义可以看出NULL可能是0,也可能是(void*)0,但C++将NULL看做0,而C将NULL看做(void*)0,测试后也确实如此。
C语言中的NULL:
在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。
而为了解决这一问题,C++11更新了nullptr关键字来代表指针空值。
- nullptr是C++11作为新关键字引入的,用于表示空指针。
- sizeof(nullptr) 与 sizeof(指针类型)所占的字节数相同。
- C++中表示指针空值时最好使用nullptr。