【发布时间】:2021-08-24 03:04:10
【问题描述】:
#include <stdio.h>
int main(){
int *p = '\0';
if (p == NULL){
// this block will get executed.
}
return 0;
}
我读过0、NULL 和\0 都等于C 中的整数常量0。
那么上面的代码在设置和检查 NULL 指针方面在技术上是正确的吗?我想它仍然需要避免,因为\0 主要用于终止字符串,它的用法在这里令人困惑?
【问题讨论】:
-
我认为答案是肯定的:字符常量
'\0'是一个值为零的整数常量,因此它作为空指针常量是有效的。所以int *p = '\0';确实应该将p初始化为空指针。我觉得我以前在这个网站上看到过这个问题,但还没有找到重复的问题。无论如何,这在风格上肯定很糟糕。 -
创建宏
NULL是因为当时并非所有硬件都使用“零”作为空指针。 C 很晚才采用 C++ 中的“整数零表示空指针”概念。
标签: c