初识C语言五(1)

(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,仅此而已。】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值