空指针的值应该是0还是NULL

时间:2022-08-31 09:02:20
很多人都争论过这个问题,本来不想再问一遍的,可刚才做《高质量C++/C编程指南》中附录B的第一题时,被正确答案判了0分,心里有点不服气,因为我清楚的记得C++primer中,空指针的值确实是0的,而之所以可以用NULL初始化一个指针,是因为NULL是从C中继承下来的预处理变量,其值为0。我把C++primer找出来,果然我的记忆没有问题。可《高》一书中,标准答案认为char *p如果要与零值比较,就应该与NULL比较,于0比较是不规范的写法,不得分。
http://man.lupaworld.com/content/develop/c&c++/c/c.htm#_Toc520634066

现在向各位CSDN大牛求证,空指针的值应该是0,还是应该是NULL?

9 个解决方案

#1


就C++来说 建议空指针赋值为0.这会有更好的移植性

#2


就扔了那个林锐的破书吧。

#3


事实上NULL就等于0,所以。。。。。。
NULL是表象、0是本质

#4


NULL就是0,这是编程风格的问题
VC中的定义#define NULL    0,在windef.h里

举个例子,int bl;你说应该如何赋0值?
从编译器角度讲
bl  = 0;
bl = NULL;
bl = false;
都是等价的,但是int型从风格上来说必须用0,这样程序才清晰!

#5



#ifndef NULL
#ifdef  __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

#6


C++一样的, C不一样。指针比较写成NULL是惯例,别人至少好阅读。

#7


char *p如果要与零值比较,就应该与NULL比较,于0比较是不规范的写法
这句应该没问题吧

至于赋值那种更好些,我也想知道

#8


这个就像字符串的'\0' 和 0一个道理!
你觉得 char a = 0;  好还是 char a = '\0'; 好呢?

我觉得一样好! 嘿嘿

#9


哎,其实我也觉得这种问题拿来问有点不好,谢谢各位了

#1


就C++来说 建议空指针赋值为0.这会有更好的移植性

#2


就扔了那个林锐的破书吧。

#3


事实上NULL就等于0,所以。。。。。。
NULL是表象、0是本质

#4


NULL就是0,这是编程风格的问题
VC中的定义#define NULL    0,在windef.h里

举个例子,int bl;你说应该如何赋0值?
从编译器角度讲
bl  = 0;
bl = NULL;
bl = false;
都是等价的,但是int型从风格上来说必须用0,这样程序才清晰!

#5



#ifndef NULL
#ifdef  __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

#6


C++一样的, C不一样。指针比较写成NULL是惯例,别人至少好阅读。

#7


char *p如果要与零值比较,就应该与NULL比较,于0比较是不规范的写法
这句应该没问题吧

至于赋值那种更好些,我也想知道

#8


这个就像字符串的'\0' 和 0一个道理!
你觉得 char a = 0;  好还是 char a = '\0'; 好呢?

我觉得一样好! 嘿嘿

#9


哎,其实我也觉得这种问题拿来问有点不好,谢谢各位了