• NULL, '',0 '0'的区别


    如题,在程序中经常遇到NULL,和'',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样:

    1、NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内容那个:

    #if !defined(NULL)&&defined(__NEEDS_NULL)

    #ifdef __cplusplus

    #define NULL 0

    #else

    #define NULL ((void *)0)

    #endif

    #endif

    NULL 在c中用(void*)0表示,在c++中用0表示。

    2、'':''表示字符串结束,它在ASCII中的值为0(数值0,非字符‘0’)

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

    在内存中NULL 和'' 和'0'都是一个8位的char类型,NULL 和'' 值一样,都是0,以数字方式读取就是0,以字符串读取时就是''或者null(和编译器有关),而‘0’在内存存储着48,以字符读取就是'0',以数字读取就是48,至于0,可能是char ,int ,float,double等类型,但是值和NULL和''一样,都是0

    printf("%d",'0');==>48

    printf("%c",'0');==>0

    printf("%c",0);==>空(即NULL)

    printf("%d",0);==>0

    那么0+'0',0+''分别是什么呢?

    printf("%c",0+'');==>空(NULL) 先转换成int,然后ASCII编码相加为0,%c输出,转换成char,所以输出NULL

    printf("%d",0+'');==>0                 先转换成int,然后ASCII编码相加为0,%d输出,不用转换,输出数字0

    printf("%c",0+'0');==>0

    printf("%d",0+'0');==>48


    文章转自:http://blog.csdn.net/mylinx/article/details/6873253

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

  • 相关阅读:
    linux内核数据包转发流程(三)网卡帧接收分析
    StringTokenizer类的使用
    提问的艺术(中文版)
    编写ruby扩展库
    java.lang.Math中的基本方法
    CocoStudio学习资源
    数据流图的画法
    UVa 11069
    PHP之运用CI用钩子实现URL权限控制————————【Badboy】
    [ACM] POJ 3686 The Windy's (二分图最小权匹配,KM算法,特殊建图)
  • 原文地址:https://www.cnblogs.com/Corphish/p/7144169.html
Copyright © 2020-2023  润新知