zoukankan      html  css  js  c++  java
  • c中NULL,'\0'和0之间的区别. (the difference between NULL,'\0' and 0 in c)

    1.空指针. 

    整数0常量在不同的情况下可能有不同的含义,这取决于使用它的上下文。在所有的情况下,它仍然是一个常数,也就是为0的整数,只是经不同的方式描述而已。如果拿一个指针和常量0进行比较,那么这是一个检查指针是否是空指针。这时0代表是一个空指针常量。在标准C定义中:0 可转型为 void*类型,这时 0是一个空指针或一个空指针常量。

    此外,为了提高程序的可读性,NULL宏在stddef.h文件中定义了.但是你的编译器可能会使用#undef NULL, 并将NULL定义成了其它奇怪的东西了,但是这种情况是永远不可能出现的.

    下面有三种检查空指针的方式:

    if (pointer == NULL)
    //NULL的定义被用来比较空指针.
    if (pointer == 0)
    //0是空指针针的另外一种表殃形式.
    if (!pointer)
    //这个其实是隐含的检查是否为0

    关于第三个Bool类型的判断,可以参考: BOOL类型的判断

    非法的判断方式下面所示:

    int mynull = 0;
    <some code>
    if (pointer == mynull)

    这个对编译器来说,不是判断是否是空指针了,而是比较两个变量是否相等.在mynuul的值从来没有改变过的情况下,是可以的,但是如果变了,那就会造成意想不到的结果了.

    需要注意的是:什么是C中的空指针.空指针和底层的框架无关,如底层将空指针定义成了地址为:0xDEADBEEF,但是我们没有必要关心这个,编译器会为我们处量这个事情的.所以即使在这种可笑的架构中,我们在上面所说的三种判断空指针的方式仍然是正确的.

    但下面这些检查空指针的方式就是非法的:

    #define MYNULL (void*)0xDEADBEEF
    if(pointer == MYNULL)
    if(pointer ==0xDEADBEEF)

    2.空字符串.

    '\0'被定义为空字符,因为他是一个字符所有的位都被设为0了.这和指针没有任何的关系.你可能会看到和下面相似的代码.

    if (!*string_pointer)
    if (*string_pointer)

     这两种方式分别是用来判断指针是否是指向空字符的.这不要和空指针搞混了.正因为bit表示是一样的,并且可能会在有些情况下会交叉使用,但是实际上他们是并不相同的.

    需要注意的是: '\0'最多的是用来表示字符串的结尾.

    此外:

    '\0'(和所有的字符)都是整形常量.他和0是相等的.所以'\0'是整形的0是相等的.唯一的不同就是他传达给读者的意图(我在使用一个空字符).

  • 相关阅读:
    1337:【例3-2】单词查找树
    1336:【例3-1】找树根和孩子
    1301:大盗阿福
    CSP-J/S 第一轮知识点选讲
    【转】C++STL各容器的操作及复杂度
    如何查看SUSE的版本信息
    野人和传教士过河问题的C语言源代码
    ubuntu如何安装软件
    Heavy Transportation POJ
    Heavy Transportation POJ
  • 原文地址:https://www.cnblogs.com/algorithmic/p/2704904.html
Copyright © 2011-2022 走看看