正确理解转义字符\

一世执手 提交于 2019-12-04 18:48:05

一. strlen与sizeof的意义

sizeof是C/C++中的一个关键字,不是函数,简单的说其作用就是返回一个对象或者类型所占的内存字节数。

strlen()是一个函数,求一个字符串的有效长度,strlen函数的结束条件是遇到\0结束计数。

二.用sizeof求一个字符串分为几种情况:

A.\后面一般跟的是八进制数如 \000 \377 \378

B.\也可跟16进制如\x11 \xff

C.\后面跟的字符如\a \A \8

如下字符串举例:

"\0000" 可以看成\000 0 \0 ,sizeof 值为3,第一个\000代表ascii第一个元素(NULL空操作),第二个0是字符0,最后红色的\0是系统自带\0(他实际也是\0,\00,\000 也就是ASCII所代表的第一个元素NULL)用于结束字符串。所以sizeof就是3

 

"\3770" 可以看成\377 0 \0 ,sizeof 值为 3,第一个代表\377(注意此时的377是一个8进制数转换成十进制是255,刚好是一个字符所能表示的最大数字,一个字符占一个字节,一字节= 8位,每一位可用01表示,所以一个字符所能表示的最大范围是2^8=256 0~255), 第二个0是字符0,最后红色的\0是系统自带\0(他实际也是\0,\00,\000 也就是ASCII所代表的第一个元素NULL)用于结束字符串。所以sizeof就是3

 

"\378" 可以看成\37 8 \0 , sizeof值为3,如果\后面没有x(注意是小写x,大写X的话是算字符X),所以\378就是八进制,但是八进制怎么可能出现8呢? 所以真确理解方式应该是 \037 8 \0 ,第一个\037代表ASCII第37个元素,第二个8是字符8,第三个\0是系统自带,所以sizeof就是3

 

"\444" 此时在VS下编译不会通过,提示你, 有人会问那为什么现在不可以看成 \44 4 \0, 八进制44没有超过十进制255啊? 因为vs下面\后面三个数字为一个整体,如果这三个数里面有超过7的数,便于理解就像上面提到的"\378",可以看成\037 8 \0 在Linux下会有警告:八进制数超过范围,但是Linux会编译通过sizeof为2(原因是Linux只取了低位一个字节)

"\xff" \后面跟了小写x说明是一个16进制的数,可以理解为\xff(\255) \0 两个字符。

 

"\x0000001g1" 这是说明是一个16进制数,此时都是x后面的数都应该计算进去,而不能像八进制那样只看后三位,该字符串可以看成\x0000001(\0) g 1 \0 共四个字符。

 

"\x000000ffff" 此时在VS下面不能编译通过,因为十六进制ffff转换成十进制早已经大于255了。 在Linux有警告sizeof为2

"\A1x" 在计算机中存储是\65 1 x \0四个字符存储

三:正确理解"\8" 与 "\7"的

"\8" 就是字符8 可以看成\56, 因为\后面既不是八进制数,也不是十六进制数所以他就是一个字符8,它的ASCII编码是56,

对比"\7" 理解转义字符\, \7可以看出其后面是一个八进制数,所以他是ASCII为7 所对应的的元素

\8就是字符8, \7不是字符7而是ASCII为7所对应的元素

到这里就可以理解转义字符\的含义了:就是把ASCII编码转换成该编码所对应的字符。

 

三;正确理解\A \000 以及 字符 0

\A 相当于\65 而ASCII编码号为65 所对应的字符就是 A, 所以\A代表的就是字符'A'

 

\000 相当于\0 \00 \000 \x0000000000 而ASCII编码号为0 所对应的字符就是 NULL 空操作,也是字符串的结束标志。(注意:\0 不是字符0,\48才代表的是字符0, 但是\8就是字符8,原因上面讲过)

 

0 它是字符'0', 而该字符所对应的ASCII编码是48 它与\0不一样!!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!