linqy的个人博客分享 http://blog.sciencenet.cn/u/linqy

博文

关于C语言中NULL, ‘\0’ ,‘0’, “0” ,0之间的区别

已有 21134 次阅读 2017-8-31 09:56 |个人分类:C++|系统分类:科研笔记

首先比较一下‘’和‘0’的区别。有一个共同点就是它们都是字符,在C语言中,字符是按其所对应的ASCII码来存储的,一个字符占一个字节。请翻开你的ASCII字符集表吧,一般在你的c语言教材的附录上,没有的话网上查查哦。请看第一个ASCII码,对是0,对应的字符是(Null),其实就是‘’,即空字符。判断一个字符串是否结束的标志就是看是否遇到‘’,如果遇到‘’,则表示字符串结束。而字符‘0’对应的ASCII码是48,48对应的十六进制数就是0x30,通常我们在编程的时候,用字符转化为数字的时候经常要用到,比如要将‘8’转换为数字8,在语句中这样写就可以了,“ 8+‘0’”。这里的8就是数字。字符‘0’和数字0的区别:前者是字符常量,后者是整形常量,它们的含义和在计算机中的存储方式截然不同。但是字符常量可以像整数一样在程序中参与相关运算。例如:‘9’-3;。哈哈,是不是柳暗花明又一村啊。

  接下来我们比较一下“0”和‘0’的区别。首先“0”是字符串常量,字符串常量是由一对双引号括起的字符序列。例如:“CHINA”,“I LOVE YOU”,“123”等都是合法的字符串常量。‘0’是字符常量,字符串常量和字符常量是不同的量。1:字符常量由单引号括起来;字符串常量由双引号括起来。2:字符常量只能是单个字符;字符串常量则可以含一个或多个字符。这里先介绍表达上的主要区别,在运用中还有存储空间的不同以及赋值方式的不同等等。

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/supreme42/article/details/7300451

http://blog.csdn.net/mylinx/article/details/6873253  



https://blog.sciencenet.cn/blog-3134052-1073558.html

上一篇:c++ 中string、UTF8、char, wchar_t,UTF8,UNICODE,GBK转换
下一篇:编码ANSI、GB2312、UNICODE与UTF-8区别
收藏 IP: 111.195.164.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-28 03:17

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部