NULL, '\0',0 '0'的区别
2014-07-28 10:44
302 查看
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、'\0':
'\0'表示字符串结束,它在ASCII中的值为0(数值0,非字符‘0’)
所以在数值上NULL,'\0',0是一样的,都是0,但'0'就不同了,在ASCII码中编码为48,
所以字符0和上述三个值不同。
在内存中NULL 和'\0' 和'0'都是一个8位的char类型,NULL 和'\0' 值一样,都是0,以数字方式读取就是0,以字符串读取时就是'\0'或者null(和编译器有关),而‘0’在内存存储着48,以字符读取就是'0',以数字读取就是48,至于0,可能是char ,int ,float,double等类型,但是值和NULL和'\0'一样,都是0
printf("%d",'0');==>48
printf("%c",'0');==>0
printf("%c",0);==>空(即NULL)
printf("%d",0);==>0
那么0+'0',0+'\0'分别是什么呢?
printf("%c",0+'\0');==>空(NULL) 先转换成int,然后ASCII编码相加为0,%c输出,转换成char,所以输出NULL
printf("%d",0+'\0');==>0 先转换成int,然后ASCII编码相加为0,%d输出,不用转换,输出数字0
printf("%c",0+'0');==>0
printf("%d",0+'0');==>48
相关文章推荐
- NULL, '\0',0 '0'的区别
- NULL, '\0',0 '0'的区别
- NULL, '\0',0 '0'的区别
- NULL, '\0',0 '0'的区别
- NULL,'0','\0',0的区别
- NULL, 0, 空格与'0','\0'
- 空字符串、'\0'、0与NULL的区别以及数组清零的特点分析
- NULL, 0, 空格与'0','\0'
- 字符串中sizeof和strlen的区别,以及'\0'与NULL的区别
- C语言关于"0" '0' '\0'之间的区别。
- Asp.Net中String.Empty、null和""的区别
- C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
- C语言中的0与'0'有什么区别
- String.Empty,NULL和""的区别
- VB中 0、""(空字串)、Null、Empty、与 Nothing 的区别
- 转:C#中NULL,"",DBNULL,String.Empty,Convert.IsDBNull()的区别
- String.Empty,NULL和""的区别
- String.Empty,NULL和""的区别
- C#中null与""的区别;C#中的几种跳转语句详解
- string str = null 与 string str =""的区别