| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1226 人关注过本帖, 2 人收藏
标题:(请教)NULL和0的区别
只看楼主 加入收藏
zamely
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2013-6-15
结帖率:77.78%
收藏(2)
已结贴  问题点数:20 回复次数:13 
(请教)NULL和0的区别
VC6.0中编辑C文件:
    int *p=NULL;
    之后为何可以if(p==0)没问题,而if(p==100)却有问题呢?0是整形,怎么可以和指针比较呢?
#ifndef NULL
#ifdef  __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
这个是来自stddef.h文件中的,把NULL定义为(void*)0(非c++环境下)
我实在不能理解为何p=NULL,又可以等于0
2014-01-16 10:21
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:3 
在计算机的世界里,只有0和1,并不存在NULL

总有那身价贱的人给作业贴回复完整的代码
2014-01-16 12:11
xiaopo
Rank: 1
等 级:新手上路
帖 子:8
专家分:3
注 册:2010-7-17
收藏
得分:3 
同不知的路过,感觉p是指针确实没法和0比吧,难道说是0地址?
2014-01-16 14:34
zamely
Rank: 2
等 级:论坛游民
帖 子:42
专家分:10
注 册:2013-6-15
收藏
得分:0 
回复 2楼 embed_xuel
谢谢回复,这个道理我明白。NULL是宏定义的,在c编译中它是值为0的空指针,当我们检测一个指针是否为空的时候,为何可以直接和数字0比较呢?却不能和其他数字比较
2014-01-16 15:05
纸T0
Rank: 4
来 自:
等 级:业余侠客
威 望:2
帖 子:34
专家分:216
注 册:2013-11-16
收藏
得分:3 
NULL可以表示成"0x00000000".和0是一样的.

"0x00000000"是数组,占24字节;
int整数占四字节。

[ 本帖最后由 纸T0 于 2014-1-18 15:21 编辑 ]

2014-01-16 18:36
sunshiqiang
Rank: 2
等 级:论坛游民
帖 子:14
专家分:16
注 册:2014-1-5
收藏
得分:3 
这算不算钻牛角尖,0不也代表空和没有嘛 那100除了代表是个整数就没有别的了
2014-01-16 22:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
100也可以代表一个地址   不过这个地址却不是我们可以访问的

DO IT YOURSELF !
2014-01-16 22:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
在某些古老的平台上 NULL不是0 比如类似0x7fff这样的 而现在的平台基本上NULL就是0了
2014-01-16 23:15
夏天天蓝
Rank: 2
等 级:论坛游民
帖 子:39
专家分:86
注 册:2013-12-30
收藏
得分:3 
现在的编程应该随处可见这样的代码了,
比如前面有一句 *p=NULL , 后面往往会出现一个 if(p) ,0和NULL都是指这个地址内的内容为空。
2014-01-17 08:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:3 
《ISO/IEC 9899:201x》第 6.3.2.3 Pointers 节 第3条 如是说:
An integer constant expression with the value 0, or such an expression cast to type void *, iscalled a null pointer constant.

明白了没?
程序代码:
#include <stdio.h>

int zero()
{
    return 0;
}

int main()
{
    int* p1 = 0;                // ok
    int* p2 = (3-3)*3/3;        // ok
    int* p3 = (void*)zero();   // ok
    int* p4 = zero();           // syntax error

    return 0;
}

2014-01-17 12:42
快速回复:(请教)NULL和0的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049647 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved