在一个微信公众号:AutoCodes  上面看到一篇推文,感觉整理的挺好的,分享给大家!后面有一个问题,可以一块讨论,数字0和字符0不是一样的吧,那数字有ASCII码吗?原文如下:【C语言】'\0'、'0'、' '、“0”、0的区别详解

文章内容部分整理自网络!若有冒犯请指出,我们及时更正!

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示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 00000000 00000000 .

如下:

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 的区别,C语言'\0'、'0'、' '、“0”、0的区别详解相关推荐

  1. C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解

    这里写目录标题 C语言的底层逻辑剖析函数篇(其二),0基础搞定函数,初识函数递归,超详解 开篇语 函数的调用(嵌套调用和链式访问) 1.嵌套调用 2.函数的链式访问 函数的声明和定义 函数声明和定义分 ...

  2. android 6.0 存储卡,Android 6.0区别U盘和SD卡设备的方法详解

    如下所示: public static boolean isSdcardExists(Context context) { StorageManager storageManager = Storag ...

  3. R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据

    R语言rms包生存分析之限制性立方样条(RCS, Restricted cubic spline)分析详解实战:拟合连续性自变量和事件风险之间的关系:基于survival包lung数据 目录

  4. c语言常量的正确表示const,C语言中的const和free用法详解

    注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...

  5. C语言指针面试题解析(万字超多题,每题都有详解)

    目录 零.前言 1.整型数组 2.字符数组 1.strlen函数 2.arr[]={'a','b','c'....}型 1.sizeof()计算 2.strlen()计算 3.char arr[]=& ...

  6. 是否显示展开_Creo7.0教程之绝对精度对钣金件展开的作用详解

    在讲Creo7.0绝对精度对钣金展开的帮助之前,我们有必要先来说明一下Creo的精度定义. 刚使用Creo7.0版本的新建模型,很多网友就问,怎么模板文件中有两个同样单位的选择,"abs&q ...

  7. go语言导入git包_使用go module导入本地包的方法教程详解

    go module 是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始, go module 将是Go语言默认的依赖管理工具.到今天 Go1.14 版本推出之后 Go mod ...

  8. Unified Functional Testing(UFT)15.0.2入门保姆级教程(一),图文详解。QTP

    UFT入门之侦测器(ObjectSpy)及录制第一个脚本 实验说明 1.Quick Test Pro(QTP)11.5后更名为Unified Functional Testing(UFT) 2. 实验 ...

  9. c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解

    c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...

  10. 【51单片机快速入门指南】4.2: SSD1306 OLED屏(0.96寸、1.3寸)的I2C控制详解

    目录 硬知识 SSD1306简介 I2C 接口 从机地址位(SA0) I2C 总线写数据 命令解码器 晶振电路和显示时间发生器 复位 图形显示数据RAM (GDDRAM) 命令表 基本命令表 部分指令 ...

最新文章

  1. 信用模型评分卡入门介绍
  2. 打印show attend and tell的解码器网络结构
  3. [转] MemCached 的 stats 命令
  4. 只需5分钟即可启动并运行分层架构:: Spring Boot第1部分
  5. GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD)
  6. 榨取kkksc03(洛谷-P1855)
  7. 2020年最前沿的 8 本AI技术图书—文末留言赠8本
  8. 部署项目到Linux服务器步骤
  9. Objective-C的Runtime System
  10. Linux操作系统下进程讲解(史上最强总结)
  11. 北大生物信息学学习(2) 生物学及生物学信息学的发展
  12. abb机器人工具坐标系设定方式_设定abb机器人工具坐标的方法
  13. Linux课程设计:Linux系统下多进程的创建与通信
  14. 计算机电路基础知识点总结,《计算机电路基础》课程教学方法的探索
  15. 运算放大器---输入偏置电流(IB)
  16. Unity IOS设备陀螺仪控制相机旋转
  17. 基于TencentOS-tiny实现甲醛传感器(英国达特 WZ-S)数据解析思路及实现
  18. java做一个客房管理系统定制_java实现客房管理系统
  19. AddressBook
  20. Qt程序无法启动,debug时提示During startup program exited with code 0xc0000135

热门文章

  1. Egg 2.20.0 发布,阿里开源的企业级 Node.js 框架
  2. 明晰当下洞见未来 做区块链你还需要这四项技能
  3. D.579 - ClockHands
  4. 自定义标签之使用struts的valueStack取值
  5. ADO.NET入门教程(六) 谈谈Command对象与数据检索
  6. java中带包的类在命令行中的编译和执行中出现的问题及解决办法
  7. 那些年使用Android studio遇到的问题
  8. c语言一行灯的熄灯问题,熄灯问题
  9. android缓存垃圾扫描功能吗,Android 系统缓存扫描与清理方法分析
  10. 重构Webpack系列之六 ---- 配置文件