NULL是指针吗?

Joe*_*Joe 5 c null pointers conceptual concept

因此,我与我的教授较早地争论过,认为NULL不是指针,但他坚持认为这是因为存在诸如NULL指针之类的东西。所以,现在我有点困惑,如果NULL确实是一个指针

我已经尝试过在互联网上搜索,但找不到任何答案,所以我的最后选择是在这里

PSk*_*cik 4

在 C 中,NULL是一个扩展为空指针常量的宏。

7.19p3

宏是

NULL 扩展为实现定义的空指针常量;...

空指针常量是一个整数常量表达式,其值为0(例如01-142*0LL、 等)或此类表达式转换为(void*)

6.3.2.3p3

值为 0 的整型常量表达式,或此类转换为 void * 类型的表达式,称为空指针常量。66) 如果将空指针常量转换为指针类型,则生成的指针(称为空指针)为保证与任何对象或函数的指针比较不相等。

最常见的 C 实现定义NULL00L、 或((void*)0)

所以你对的。NULL不必是指针。

(IIRC,C++ 甚至不允许强制(void*)转换NULL,这意味着NULL在 C++ 中始终具有整数类型。正因为如此,并且因为void*指针在 C++ 中不那么容易与常规指针进行比较,所以 C++>=11 现在有一个特殊的nullptr关键字。)