首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • NULL与0的区别? [已结帖,结帖人:iceman19860106]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iceman19860106
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-10-28 14:09:20 楼主
    为什么
    int *p=NULL;是正确用法

    int *p=0;不是正确用法呢?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jillnicky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:11:481楼 得分:0
    一个是数字,一个是……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jillnicky
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:13:042楼 得分:0
    *p可以直接指向0吗?

    显然不能……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oldnwind
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:19:183楼 得分:0
    在ASCII中,NULL 的码位为0x00,0的码位为0x30。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hqin6
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:21:354楼 得分:2
    C/C++ code
    NULL定义是这么的: #define NULL 0 #define NULL ((void*)0)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ChamPagneZ
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:22:295楼 得分:2
    C/C++ code
    //C++里面,都是正确的.第二个会做隐式转换.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xtting_8984313
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:27:036楼 得分:2
    这个就是风格问题,叫自己的lp叫妻子还贱内?
    这也是一个良好的习惯,看到NULL直接反映为指针,如果看到0会反映为数值,虽然效果一样。
    还有有人提出用NUL作为字符串的结束标志,也不是用0。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ForestDB
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:28:217楼 得分:0
    色既是空,空既是色。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wang0635
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:28:288楼 得分:0
    看到0的第一反应是数值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dzc8866
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:32:539楼 得分:2
    怎么会呢?我在WIN-TC里面int *p=0;这样是不会报错误的,奇怪。

    不过在C++里面,如果把指针定义成空指针的话下面是等价的:

    int *p;
    p = NULL;
    p = 0;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tian428
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 14:32:5910楼 得分:2
    # define NULL  (void *)0
    隐式转换了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xxgamexx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 15:00:1211楼 得分:1
    引用 4 楼 hqin6 的回复:
    C/C++ code

    NULL定义是这么的:


    #define NULL 0
    #define NULL ((void*)0)


    int *p=(void*)0;是吧??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lbh2001
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 15:26:2712楼 得分:2
    C++中习惯用
    int *p = 0;
    C中习惯用
    int *p = NULL;
    但C中用
    int *p = 0;
    也是对的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hjzwl1018
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 16:25:4113楼 得分:1
    习惯问题,C中习惯用NULL
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iceman19860106
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 16:25:5114楼 得分:0
    既然0与(void *)0的效果等效,那么为什么不统统使用0啊??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Kenny_Glacier
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 16:30:0715楼 得分:0
    只是概念上的东西
    0表示数字,是有实际意义的
    NULL表示什么也不是
    int*p = 0;就是说p这个指针的值是0
    int*p = NULL;就是这个指针不指向任何东西
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xxgamexx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 19:37:3216楼 得分:1
    引用 15 楼 Kenny_Glacier 的回复:
    只是概念上的东西
    0表示数字,是有实际意义的
    NULL表示什么也不是
    int*p = 0;就是说p这个指针的值是0
    int*p = NULL;就是这个指针不指向任何东西


    晕  15楼兄弟好象弄错了,如果0是数字的话就明显不对了! 呵呵

    其实我觉得C++也习惯 =NULL吧 ,个人习惯~

    LS各位的意思是  #define NULL 0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Arthur_
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 19:42:3917楼 得分:0
    the same
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • enrico
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 19:45:3218楼 得分:1
    引用 3 楼 oldnwind 的回复:
    在ASCII中,NULL 的码位为0x00,0的码位为0x30。


    你把数字0和字符'0'搞混了,数字0=0x00,字符'0'=0x30
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bhdgx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 20:23:5019楼 得分:1
    [Quote=引用 4 楼 hqin6 的回复:]
    C/C++ code
    NULL定义是这么的: #define NULL 0 #define NULL ((void*)0)

    [/Quote]
    在C中用宏定义的方式进行了转换了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kingofice
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 20:34:0020楼 得分:1
    VS2005
    stdlib.h下
    C/C++ code
    #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif

    就是说,如果是C++,则把NULL作为0的宏定义,否则(即C语言)则是((void *)0)的宏定义。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • littler_winds
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 20:47:0821楼 得分:0
    学习了~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • e_sharp
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:10:1822楼 得分:0
    c++中是一样的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tlw112
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:15:1523楼 得分:0
    学习了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • music_xu
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:26:0824楼 得分:0
    NULL表示空,有的地方同0,但是有的地方用法中NULL对应的是-1,所以不是一回事,
    编程中不要乱换,该用什么用什么,除非你对它的使用环境非常了解,要不然??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qmm161
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:29:0025楼 得分:0
    唉~~~编译的时候把编译器报的信息看清楚不就知道怎么回事了?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kiffa
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 21:57:2626楼 得分:0
    反正教主推荐用普通的0,而不要用作为宏的NULL。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • k1988
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 23:03:2727楼 得分:0
    编译器相关
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pengzhixi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 23:10:0228楼 得分:0
    C++里面两者都是正确的,而且提倡使用0而不使用NULL
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CCSSDDNNMLSQ
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-10-28 23:16:2629楼 得分:0
    NULL就是0,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zez
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 3

    发表于:2008-10-29 13:20:2430楼 得分:0
    受不了了.
    这种东西也来讨论
    NULL 就是 0
    他们完全等价...

    唯一的区别都是人为理解上的...

    就像你的大名和小名..
    你老妈叫你小名
    但到社会上就叫你大名了...

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iambic
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      4