(5)字符串+转义字符+注释
字符串: "hello world\n"
像这种由双引号(Doble Quote)引起来的一串字符称为字符串字面值(String Literal),或简称字符串。
【注:字符串的结束标志是一个\0的转义字符,而在计算字符串长度的时候\0是结束标志,不算作字符串内容。】
由" "双引号引起来的一个东西叫字符串。
如:"abcdef" "hello world" " "(空字符串也是)
那么这时如果要把一个字符串存起来,应该放在哪里?
假设有一块足够大的空间可以放很多字符的话,那问题不就解决了嘛。
这时联想到数组的概念。——用数组来存放。
【注:数组简单理解其实是一组数。】
这里举char类型的数组:
int main(){
char arr1[]="abc";
printf("%s\n",arr1);
return 0;
}
(“ printf("%s\n",arr1);”中“\n”表示换行的意思,整体意思是表示我要打印arr1存放的字符串)
【注:打印字符串用“%s”】
如果这串代码中再加上char arr2[]={‘a’,'b','c'};——
【注:由单引号' '引起的“a”叫做字符a,多个字符放在双引号" "里面叫做字符串】
呈现为:
int main(){
char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%s\n",arr1);
printf("%s\n",arr2);
return 0;
}
(其中,arr1数组表示把一个字符串放到一个数组里面去;arr2数组表示给arr2数组放进三个字符)
试着去调试这串代码,会发现——
其打印结果为:arr1——abc
arr2——abc烫烫烫烫(乱码)
检测方法:调试——窗口——监视——点监视1或几都可以——然后输入想要查询的值【注:要在逐过程(F10)的状态下才会有监视】
(监视可以看当前代码上下环境中一些变量的值。)
运用监视,输入“arr1”“arr2”两个数组,然后点左侧的加号打开
可发现:
arr1有[0][1][2][3]4个元素——'a' 'b' 'c' 0
arr2有[0][1][2] 3个元素——'a' 'b' 'c'
两者相比,arr2中缺少一个零,导致输出结果不同。
如果这时往 char arr2[]={'a','b','c',0};中加上0,输出结果就一样了。
引出一个发现——
当我们以字符串的形式来触发arr1时会自动包括一个元素0,若以字符的形式,则只有三个元素,但若补上0,则结果一样。
分析:
在字符串"abc"中不仅有a、b、c三个元素,还包括0。
"abc"——'a' 'b' 'c' '\0'(\0斜杠零的值是0)
在字符'a' 'b' 'c'中输出结果会出错,但加上一个零,也就是加上'\0',其输出结果一样。
'\0'——表示字符串的结束标志
''abc''字符串abc因末尾默认有'\0',也是该字符串结束的标志,而因'a' 'b' 'c'字符没有结束标志,内存会自行运行出现错误结果,因'\0'和0,所以放其中之一即可。
大家可能对0和\0会有混乱的地方,这里解释一下——
每个字符都有其代表的值。
像'\0'——0 'a'——97(即查找所占内存空间的大小)
我们知道因为计算机只能识别二进制,所以数据在计算机上存储的时候,存储的是二进制。
而在键盘上能敲出很多字符。
如:‘a’ ‘b’ ‘c’......为字母字符
‘0’ ‘1’ ‘2’......为数字字符
那如何把这些字符转换二进制呢?
这时,有人提出给每个字符编一个数值,就很好解决了。
如:a——97
A——65(大小写的字母也是不同的字符)
像这样给每个字符都编一个值的编码方式,叫作ASCII编码。
【注:ASCII——美国标准信息交换代码】
字符所对应的值叫作ASCII码值。
像这样不同的字符都有对应的ASCII码值的话,这样就有,ASCII表的出现了。
扩充:
'\0'——斜杠0——转义字符——对应ASCII码值为0
0——数字0——从值来看与'\0'是等价的
'0'——字符0——对应ASCII码值为48
如何用c代码来查询字符所对应的ASCII码值呢?
这里就介绍一个新的函数——
strlen函数(string length字符串长度)(用来计算字符串的长度)(简单来讲就是数字符)
int main(){
char arr1[]="abc";
char arr2[]={'a','b','c'};
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
return 0;
}
其打印出来的长度结果为——
arr1——3
arr2——42
解释一下为什么会出现这样的结果:“\0”斜杠零是字符串的结束标志,不算内容;因此,strlen在求长度的时候算出的是3。
又因arr2没有结束标志,在末尾可能出现随机值,所以strlen在算长度的时候会一直数到有“\0”,即数到42个字符的时候。
因此,arr2具有不确定性,应该说“随机值”更为准确,就是说在没有“\0”的前提下,长度会一直算到最后随机值给出“\0”结束标志;所以,随机值可能为任意值。
【注:这里的随机值是随机给的,并不是固定的,42只是因为上述代码调试的结果为42,仅此而已。】