2024-12-01 01:20:48
转义符的顾名思义,用来改变意义的,为啥要改变呢?有几种情况,一种是字符有语法上的意义,比如",它本身表示一个字符串的开始/结束,那如果要一个纯字符的引号呢,比如以下字符串:"He said: \"Not too bad!\"",
里面的引号用反斜杠转义,失去了语法上的意义,是单纯的一个引号字符。
另外有一些不可见的字符,和控制字符,比如换行,跳格,退格,这些都是用反斜杠加上可见字符表示的(\n \t \b),这里n t b失去了原有的意思。
再有,如果是反斜杠紧跟着数字的话,就代表八进制数,可以转义最多3位八进制数,最大是\377,这四位其实是一个字符,是ASCII的255,所以strlen("\377")的值其实是1
\023 这里也是一样的。
注意:如果是不超过了范围的,比如"\378",因为八进制里没有8,所以\37是一个八进制数,8是另一个字符,所以strlen("\378") = 2
此外,要想表示反斜杠本身,而不是转义符,则需要给转义符加转义符,即\\,前一个\是转义符,表示让后一个\失去转义符的意义,而变成一个单纯的字符\。
所有的这些情况下,转义符都是给代码作者用的,在运行时内存里不存在这个\,也就是说
反斜杠和它后面紧跟着的字符(单个或多个,最多可以3个)合起来算一个字符,反斜杠本身不占地方。
第二个知识点就是strlen和sizeof的区别,这个比较简单,当作字符串,长度不包括结束符,
结束符是0(或者写作'\0' 或者'\000',这里又复习一下转义符),占一个字节
第三个点是sizeof对数组和指针不一样,所以第二题无论字符串多长,sizeof指针都是4个字节(64bit平台占8字节)
2024-12-01 00:29:04