转自:https://blog.csdn.net/tyyhmtyyhm/article/details/79113390
文章内容部分整理自网络!若有冒犯请指出,我们及时更正!

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字符号还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

有关字符集和编码的内容继续在微信公众号:AutoCodes中推出。

需要明白的是,这里的映射关系式“字符” <–>“数字(编码)”。
第一部分:区别
第一:’\0’

是字符,其ASCII码为0,内存中存放表示:0000 0000。

‘\0’是一个ASCII控制字符,是转义字符,代表空字符。作为字符串结尾字符。字符’\0’可以直接用ASCII码0表示,0不管是几进制,都是0(十进制),也就是0x00(十六进制)。

char c = ‘\0’;

char c = 0; //ASCII码为0的字符赋给字符变量c

这两个是一样的。当你打印的时候看你以什么形式去打印,如果是 %d,那会打印出0,如果是 %c 打印出一个空格,不是输出到屏幕上’\0’。’\0’与 0 本质上其实是一样的,一个是ASCII码,一个是该ASCII码对应的字符。字符串结束符 ‘\0’ 的ASCII 值正好是 0。所以用0判断和用 ‘\0’ 判断,结果一样(在内存中存放一样)。

‘\0’就表示将字符’0’转义,系统遇到’\0’时输出一个空格,从而表示ASCII码为0的字符(字符串结束符),而数值0和这个是一个意思,

‘\0’是字符数组或者字符串结束标志,系统在引用字符数组或者字符串的时候遇到‘\0’就会结束,在进行字符数组初始化的时候,这个‘\0’是自动加上去的。而‘0’可以作为字符数组的一个元素。
第二:‘0’

‘0’是数字字符,其ASCII码为48,也就是0x30,内存中存放表示:0011 0000
第三:’ ’

’ '空格是一个字符,其ASCII码为32,内存中存放表示:0011 0000

比如 abcd (空格)cdefg;

存入数组时,空格作为一个字符占有一个字节的空间,我们可以把它看作一个字符去处理。而 “\0” 则是这个字符串的结束标识符,也占有一个字节的空间,表示字符串结束!
第四:“0”

"0"是字符串。

“0”代表字符串“0”,即这个字符串里只包含一个字符’0’(当然字符串结尾默认再加一个’\0’)
第五:0

0是个整数,内存中表示为0000 0000,0就代表阿拉伯数字0

在逻辑运算值方面,0和’0’(ascii码值为48)的主要区别,比如 !0=1 !‘0’=0;

字符0的ASCII码实际上是48,C语言中字符0 只占一个字节(Byte),也就是内存中存放的是 01001000 (其中每一个0或1表示一个bit位)

而整数0, 它在内存中的表示全是0,C语言中一个整数的占4个字节,整数0在内存中的表示为: 00000000 00000000 0000000000000000 .
如下:
char c = ‘0’; //字符0
int a = 0; //整数0
printf("%c, %d\n", c, a);//0,0
printf("%d\n", c);//48 用整数形式打印字符,实际是打印c在内存中的值。
printf("%d\n", (c+a)); //48
printf("%c\n",(char)(c+a)); //0
输出的结果:
0,0
48
48
0
从上面你就能看出字符0和整数0的区别了。
第二部分:内容扩展

附:如果用scanf来接收字符串的话,字符串中不能含有空格,否则将以空格作为串的结束符。如果你键入得是hello world 那么实际上scanf只能获取hello 这个单词。所以要接收空格的话可以用gets()这个函数。gets(str)是读入一串以回车结束的字符,顺序存入到以str为首地址的内存单元中,最后写入字符串结束标志“\0 “,

同样在输出字符串时要用puts(),输出时直到遇到 \0 为止,最后输出一个换行符。
第三部分:问题

那么,C语言中既然’\0’与空格‘ ’是不一样的,那为什么在字符串问题中,scanf中还不能读入空格?例如字符串"hello world",用scanf以%s格式输入,只能输出"hello",字符串是以‘\0’作为结尾,而‘ ’!=’\0’。为什么呢?

这不是说明空格与\0等价,而是由于C语言的缓冲机制,scanf读取数据不是从键盘直接读取,因为键盘是字符型输入设备,且它是中断方式来被操作系统控制,所以这些IO设备存取速率及其低下,而内存是块设备,读取速度非常快,因此引入缓冲区机制来缓冲IO设备与内存的数据交换,scanf也是从缓冲区地区,而scanf函数是把空格作为缓冲区数据的分隔符,每遇到一个空格,则表示当前一段数据为可用数据,被scanf读取,而不是空格表示字符结束而被读入。
第四部分:遗留问题

在我们平台上,有读者提出这样一个问题:在查找网上资料的过程中,看到有这么一个说法“数字的ASCII码”,数字有ASCCII码吗?

读者认为字符’0’、‘1’…'9’有对应的ASCII码,而数字0、1…9是没有ASCII码的。对于这个问题,给大家一块讨论~

【C语言】'\0'、'0'、' '、“0”、0详解相关推荐

  1. marlin2.0.5.4配置详解——个人记录

    marlin2.0.5.4配置详解--个人记录 串口波特率 主板类型 挤出机数量 混色打印 温度传感器 最大温度 挤出机保护 双轴联动结构 限位开关上拉 限位开关信号 电机使能信号 禁用电机 电机运动 ...

  2. 关于android的4.2的0文件夹的详解

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

  3. mysql8.0.11 安装顺序_mysql 8.0.11 安装步骤详解

    本文为大家分享了mysql 8.0.11 安装步骤,供大家参考,具体内容如下 第一步:下载安装包 MYSQL官方下载地址:官方下载 这里第一项是在线安装,第二项是离线包安装,我选择的是第二项(不用管你 ...

  4. ASP.NET2.0 ObjectDataSource的使用详解

    介绍ObjectDataSource的使用,按照dudu的建议为了节省篇幅,做成连接,这里仅提供前三篇,后面还有几篇以后再补充吧 ASP.NET2.0 ObjectDataSource的使用详解(1) ...

  5. android ble蓝牙接收不到数据_Android蓝牙4.0 Ble读写数据详解 -2

    Android蓝牙4.0 Ble读写数据详解 -2 上一篇说了如何扫描与链接蓝牙 这篇文章讲讲与蓝牙的数据传输,与一些踩到的坑. 先介绍一款调试工具,专门调试Ble蓝牙的app.名字叫:nRF-Con ...

  6. linux下安装mysql_Linux下安装mysql-8.0.20的教程详解

    ** Linux下安装mysql-8.0.20 ** 环境介绍 操作系统:CentOS 7 mysql下载地址:https://dev.mysql.com/downloads/mysql/ 下载版本: ...

  7. mysql压缩包安装教程8.0.19,win10安装zip版MySQL8.0.19的教程详解

    win10安装zip版MySQL8.0.19的教程详解 一. 下载后解压到想安装的目录 二. 在安装目录中添加配置文件my.ini [mysqld] # 设置3306端口 port=3306 # 设置 ...

  8. mysql8.0.20安装教程linux_Linux下安装mysql-8.0.20的教程详解

    ** Linux下安装mysql-8.0.20 ** 环境介绍 操作系统:CentOS 7 mysql下载地址:https://dev.mysql.com/downloads/mysql/ 下载版本: ...

  9. mysql8.0日期类型_mysql8.0.19基础数据类型详解

    mysql基础数据类型 mysql常用数据类型概览 ![1036857-20170801181433755-146301178](D:\笔记\mysql\复习\1036857-201708011814 ...

  10. android 4.2目录结构,关于android的4.2的0文件夹的详解(目录结构挂载分析)

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

最新文章

  1. 适合做生物信息的笔记本推荐
  2. 研究人员开发出全3D打印离子动力纳米卫星推进器
  3. 1.JasperReports学习笔记1-了解JasperReports
  4. asp IIS部署An error occurred on the server when processing the URL错误提示解决
  5. 计算机2级ps教学大纲,《PhotoShop》教学大纲
  6. 英语口语 week11 Tuesday
  7. Entity Framework ---初见
  8. Flutter 的渲染逻辑及和 Native 通信
  9. typora工具的使用方法-一款非常适合程序员的工具
  10. 专注世界排名的Alexa.com宣布关站
  11. echarts实现世界地图,给不同数值的国家着色,并根据经纬度在对应位置上添加标签(一)
  12. Python 实现端口扫描器
  13. c语言算摄氏温度和绝对温度,将华氏度转换为绝对温度C语言
  14. 配置Spring AOP aspectj-autoproxy标签源码解析
  15. G1垃圾回收器详细解读
  16. Visual studio 2019 社区版下载和安装
  17. emui和鸿蒙哪个好,今天升级了鸿蒙系统,使用起来还真是传说中的顺滑,比之前的Emui好用。...
  18. 一个模仿水滴筹的项目(只是一个半成品)
  19. 15 - 单星(*) 和双星(**) 运算符的作用
  20. 论文分析与讲解思路(2)--PGCN

热门文章

  1. 第一个hadoop程序(hadoop2.4.0集群+Eclipse环境)
  2. 使用rundll32.exe运行dll函数
  3. css视差滑动(阅读网站案例)
  4. 计算机光驱无法启用,光驱提示:无法访问G:\函数不正确解决方法
  5. [批处理]在线获取双色球开奖结果历史数据
  6. QuickCHM 2.6中“不支持此接口”错误的“彻底”解决(补丁)
  7. 神奇的零知识证明,既能保守秘密,又能让别人信你!
  8. 关于ADC采样的采样频率,采样时间的问题
  9. android前置录像,Android Camera2video使用前置摄像头(Android Camera2video use front camera)
  10. windows10下whisper的安装使用和CUDA的配置