请问谁知道C++中 NULL 和 0 的区别? 具体点的,谢谢了~~

NULL是不是就等于0?可不可以等于0?例如:我在验证函数GetLogicalDriveStrings()时,GetLogicalDriveStrings(0,NULL)... NULL是不是就等于0?可不可以等于0?
例如:我在验证函数GetLogicalDriveStrings()时,GetLogicalDriveStrings(0,NULL)与GetLogicalDriveStrings(0,0)的值都是一样的,是不是代表NULL就等于0(数值上)。
展开
 我来答
若叶七夜西
2018-04-12 · TA获得超过3379个赞
知道小有建树答主
回答量:53
采纳率:100%
帮助的人:14.1万
展开全部
  • 0是一个数字,本身有着一些原生的特性诸如:起始,没有,正负的分界线,0/1中的0还可以表示否定。0可以表示数字0,也可以表示ASCII码值为0的字符。

  • NULL用于将指针指定为空指针,也就是说该指针不指向任何对象,不可以对该指针进行解引用,否则系统会报错。

  • 在数值上NULL,'\0',0是一样的,都是0,但'0'就不同了,在ASCII码中编码为48,所以字符0和上述三个值不同。

  • 什么是 NULL?

    [6.3.2.3-Footnote] The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant

    即 NULL 是一个标准规定的宏定义,用来表示空指针常量。因此,除了上面的各种赋值方式之外,还可以用 p = NULL; 来使 p 成为一个空指针。

  • 指针的概念

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

  • malloc 函数在分配内存失败时返回 0 还是 NULL?

    malloc 函数是标准 C 规定的库函数。在标准中明确规定了在其内存分配失败时返回的是一个 “null pointer”(空指针):

    [7.20.3-1] If the space cannot be allocated, a null pointer is returned.

    对于空指针值,一般的文档(比如 man)中倾向于用 NULL 表示,而没有直接说成 0。但是我们应该清楚:对于指针类型来说,返回 NULL 和 返回 0 是完全等价的,因为 NULL 和 0 都表示 “null pointer”(空指针)。

  • ‘\0’:‘\0’是一个“空字符”常量,它表示一个字符串的结束,它的ASCII码值为0。注意它与空格' '(ASCII码值为32)及'0'(ASCII码值为48)不一样的。在C/C++中,当要给一个字符串添加结束标志时,都应该用‘\0’而不是NULL或0。

  • 当我们要置一个指针为空时,应该用NULL,当我们要给一个字符串添加结束标志时,应该用‘\0’。

裴晶宇
推荐于2017-12-15 · TA获得超过772个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:84.5万
展开全部
1.NULL是空地址的意思,在使用指针变量时表示一个空地址,NULL的值在“stdio.h”头文件中被定义为一个值为0的符号常量;即
#define NULL 0 ,即NULL的值为0
2.0可以表示数字0,也可以表示ASCII码值为0的字符
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友bfb8612
2012-12-09
知道答主
回答量:49
采纳率:0%
帮助的人:37.8万
展开全部
NULL返回0值,用户定义用0也可以实现,但NULL有的时候是编译系统给出的,用途比0要广泛的多,用好了会提高编程效率,增加程序阅读性
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
847638778
2012-12-09
知道答主
回答量:34
采纳率:100%
帮助的人:16.4万
展开全部
选自stddef.h头文件

要么是0,要么是((void*)0)

A null pointer is generally used to signify that a pointer does not point to any object.
In C++, NULL expands either to 0 or 0L.

源文件:
/* Define NULL pointer value and the offset() macro */
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
欢乐多Ek
2012-12-09 · TA获得超过478个赞
知道小有建树答主
回答量:477
采纳率:0%
帮助的人:417万
展开全部
有时候是这样定义的
#define NULL ((void *)0)

其实NULL是地址空间为0x00000000起始的4k页
这个地址是不可访问的,所以你如果强制访问会出错,这也是NULL多用于指针的原因。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式