- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c和c中NULL和0的区别
1,什么是空指针常量(null pointer constant)?[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.这里告诉我们:0、0L、\0、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (tyc:我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一般的 C 系统选择 (void*)0 或者 0 的居多(也有个别的选择 0L);至于 C++ 系统,由于存在严格的类型转化的要求,void* 不能象 C 中那样自由转换为其它指针类型,所以通常选 0 作为空指针常量(tyc: C++标准推荐),而不选择 (void*)0。2,什么是空指针(null pointer)?[6.3.2.3-3] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.因此,如果 p 是一个指针变量,则 p = 0;、p = 0L;、p = \0;、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一个空指针,由系统保证空指针不指向任何实际的对象或者函数。反过来说,任何对象或者函数的地址都不可能是空指针。(tyc: 比如这里的(void*)0就是一个空指针。把它理解为null pointer还是null pointer constant会有微秒的不同,当然也不是紧要了)3,什么是 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 成为一个空指针。(tyc:很多系统中的实现:#define NULL (void*)0,与这里的“a null pointer constant”并不是完全一致的)4,空指针(null pointer)指向了内存的什么地方(空指针的内部实现)?标准并没有对空指针指向内存中的什么地方这一个问题作出规定,也就是说用哪个具体的地址值(0x0 地址还是某一特定地址)表示空指针取决于系统的实现。我们常见的空指针一般指向 0 地址,即空指针的内部用全 0 来表示(zero null pointer,零空指针);也有一些系统用一些特殊的地址值或者特殊的方式表示空指针(nonzero null pointer,非零空指针),具体请参见C FAQ。幸运的是,在实际编程中不需要了解在我们的系统上空指针到底是一个 zero null pointer 还是 nonzero null pointer,我们只需要了解一个指针是否是空指针就可以了——编译器会自动实现其中的转换,为我们屏蔽其中的实现细节。注意:不要把空指针的内部表示等同于整数 0 的对象表示——如上所述,有时它们是不同的。5,如何判断一个指针是否是一个空指针?这可以通过与空指针常量或者其它的空指针的比较来实现(注意与空指针的内部表示无关)。例如,假设 p 是一个指针变量,q 是一个同类型的空指针,要检查 p 是否是一个空指针,可以采用下列任意形式之一——它们在实现的功能上都是等价的,所不同的只是风格的差别。指针变量 p 是空指针的判断:if ( p == 0 )if ( p == \0 )if ( p == 3 - 3 )if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */if ( NULL == p )if ( !p )if ( p == q )...指针变量 p 不是空指针的判断:if ( p != 0 )if ( p != \0 )if ( p != 3 - 3 )if ( p != NULL ) /* 使用 NULL 必须包含相应的标准
您可能关注的文档
- 1、党性质:中国共产党是中国工人阶级先锋队,同时是中国人民与中华民族先锋队,是中国特色社会主义.doc
- 1微格教学训练一些常识.doc
- 16春 东财《面向对象程序设计》在线作业三(随机).doc
- 1—破冰游戏与开场.ppt
- 1微软核心价值观.doc
- 1学习通过重要情节语言动作描写来表现人物性格.ppt
- 1软件设计一般分为总体设计与详细设计.doc
- 2-3《梦游天姥吟留别》(新人教版选修《中国古代诗歌散文欣赏》).ppt
- 2.3《中国古典文学时代特色》(人民版必修3).ppt
- 2.6 水龙吟 (人教版必修4).ppt
- 2024年广西普法考试答案16.docx
- 2024年秋江苏开放大学项目决策分析与评价060067形考作业1-3.docx
- 2024年秋江苏开放大学项目决策分析与评价060067形考作业3.docx
- 2024年秋江苏开放大学项目决策分析与评价060067形考作业3.pdf
- 2024年秋江苏开放大学项目决策分析与评价060067形考作业1.docx
- 备战2025:小说的人物形象:深度解析与知识梳理.docx
- 乡镇党委2024年党建工作总结报告.docx
- 24秋国开《学前儿童教育健康活动指导》形成性考核1-4答案.docx
- 24秋国开《学前儿童教育健康活动指导》形成性考核3答案.pdf
- 24秋国开《学前儿童教育健康活动指导》形成性考核4答案.pdf
文档评论(0)