c++转义字符及相关知识

此次都是先看一下这些例子,看看它们有什么区别和联系?eg1:
1.字符串"\3770"长度为?? (2)
2.字符串"\3780"长度为?? (3)
3.字符串"\xf"长度为?? (1)
eg2:
1.字符串"\\22a,0\n"长度为?? (6)
2.strlen(“\\22a,0\n”) (6)
3.char s[]=“\\22a,0\n”;sizeof(s) (7)
eg3:
4.字符串"\\22a,0\0\n"长度为?? (7)
5.strlen(“\\22a,0\0\n”) (5)
6.char s[]=“\\22a,0\0\n”;sizeof(s) (8)
(这些都涉及到转义字符,所以有很多坑。)
有些答案可能和你想的不大一样,如果这些题目做起来不是太熟练,不妨看一下接下来的总结吧,一些疑惑或许就能解决呢!一、转义字符1.概念:所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"“来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了,故称转义字符。2.所有转义字符和对应意义:3.例题分析:eg2:
1.字符串”\\22a,0\n"长度为?? (6)

eg3:
4.字符串"\\22a,0\0\n"长度为?? (7)
1题:\转义字符输出\,算作一个字符1;
\22,将八进制转化为十进制,即ASCII 码值等于18的字符,长度1;
a一个字符,长度1;
,(逗号)一个字符,长度为1;
0一个字符,长度1;
\n转义字符,回车,长度1; 故总长为6.
4题:
中间多出一个\0转义字符 空字符,长度为1; 故总长为7.
(注:\0不是字符‘0’,它是空字符,字符‘0’对应ASCll值为48)4.注:①
\ddd: 表示按1到3位八进制数所代表的字符。注意它之后跟的数字的范围:将八进制转化为十进制,数值不可超过255。
原因:转义字符代表一个字符,而一个字符占一个字节,一字节= 8位,所以一个字符所能表示的最大范围是2^8=256(0~255),故转化为十进制后其数值不得超过255,超过的数字另外按照一个字符计算。
故eg1中1、2就可以很好理解了1.字符串"\3770"长度为?? (2)
2.字符串"\3780"长度为?? (3)
\377 转化为十进制为255
\378 转化为十进制为256, 8超过最大限度,因此8算作另一字符
两个之后的0又看做另一字符,故1题长度为2,2题长度为3②
\xhh: 十六进制代表的任意字符
同①要注意之后所跟的数字范围,转化为十进制之后不能超过255
还有x要注意为小写,X就不是十六进制转义字符了3.字符串"\xf"长度为?? (1)
eg1中3:
补充知识:一个f表示十进制15,从af表示从1015
故3题\xf从十六进制转化为十进制表示ASCll值为16的字符,长度即为1二、strlen()与sizeof()求长度区别1.两者概念区分:
strlen()是一个函数,常用于求一个字符串的有效长度,当遇到\0时结束计数(长度不包含’\0’)。
而sizeof是C/C++中的一个操作符(关键字),不是函数,其作用简单说就是返回一个对象或者类型所占的内存字节数。
2.通过例题来区分:eg2:
2.strlen(“\\22a,0\n”) (6)
3.char s[]=“\\22a,0\n”;sizeof(s) (7)

eg3:
5.strlen(“\\22a,0\0\n”) (5)
6.char s[]=“\\22a,0\0\n”;sizeof(s) (8)
2题3题6题
区分strlen和sizeof:长度计算同1和4题
(需注意: c语言规定了一个“字符串结束标志”,以字符‘\0’作为结束标志;C系统在用字符数组存储字符串常量时会自动加一个‘\0’作为结束符)
故:strlen求字符串长度时,遇到\0结束,但不会加上\0所占长度,故长度仍为6.
而sizeof计算实际长度会算上\0所占的字符长度,因此长度要加1,故3题长度变为7,6题长度变为8.
2题5题
strlen中注意\0:
5题中没到\n时就出现了\0,故在此处结束,长度计算截止到\0前的0处,故题5长度变为5就不在是6题sizeof求出来的8了.通过上面的分析,刚开始那些例题就可以很好理解了。下面sizeof求长度时还需要注意一些东西,接下来再来详细说明一下。三、sizeof()用法详解1.概念: sizeof是一个操作符(operator),其作用是返回一个对象或类型所占的内存字节数。
2.用法:
sizeof(x):x 可以是变量、数组、类型、表达式等,只要x的类型确定。
3.应用举例:
①sizeof(基本数据类型)
基本数据类型:short、int、long、float、double,它们在不同位数的计算机下的取值是不同的,sizeof值即为每种数据类型长度.
我们的计算机一般都为32位,下面以32位为例:
eg:sizeof(short); 2
sizeof(int); 4
sizeof(long); 4
sizeof(float); 4
sizeof(double); 8
sizeof(char); 1
sizeof(string); 4
②sizeof(指针)
指针:是用来记录另一个对象的地址,所以指针的内存大小等于计算机内部地址总线的宽度。
在32位计算机中,一个指针变量的返回值是4故指针变量的sizeof值与指针所指的对象没有任何关系,sizeof(指针)大小即为4.
eg:char *str1=“abcde”;sizeof(str1)=4;
char str2[]=“abcde”;sizeof(str2)=5;
str1是一个指针,指针指向了字符串"abcd",但sizeof只测的是字符型指针占的空间,故sizeof(str1)=4.
str2是一个字符型数组,对于一个数组,返回这个数组所占的总空间,所以sizeof(str2)是字符串"abcde"占的总空间为5.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值