C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释-1

C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释-1

简介:

我是一名初学者,我会以我的角度来展现学习编程的一个过程,每个阶段的对知识点的理解都将写在上面,如果后续对知识点的理解有所偏差,我将会在最上面备注所要纠正的地方,并在新发布的博客上面,提醒之前哪个博客的知识点需要纠正,每个阶段全部发完之后将会总结在一个博客上面。(如果大佬看到我的知识点有错并评论,我将会关注大佬并纠正错误的知识点,欢迎各位批评指正)

纠正:

字符串

这一篇博客我们来了解一下字符串,看下面这个我们熟知的也是最先学习的代码

"Hello world!"

这一堆的字母就是字符串字面值,简称字符串,每一个字母都是一个字符,字符串需要用" "双引号来引起,字符需要用’ '单引号来引起,就像下面

"Hello world!"  //字符串
'a'  //字符
'!'  //字符

字符串也算常量,上面三条都算字面常量,之前的讲常量的时候就举过这种例子

那么字符串有什么用呢?
假设我们要把下面的字符串存起来,那么我们需要怎么存呢?

"abcdef"

我们可以把它放在字符串数组里,有两种形式如下:

#include<stdio.h>

int main()
{
char arr1[10]="abcdef";                     //形式一
char arr2[10]={'a','b','c','d','e','f'};    //形式二

//我们打印一下这些字符串
printf("%s\n",arr1);
printf("%s\n",arr2);

return 0;
}

运行的结果:
abcdef
abcdef
请添加图片描述

把"abcdef"都存在arr[ ]这个数组里面,[ ]里面数是多少,就能存多少字符

arr[10]可以存10个字符 ,但一定要不小于你要存的字符

你也可以不写[ ]里面的数字,它会自己根据你要存的字符串来调整,就像这样

#include<stdio.h>

int main()
{
char arr[]="abcdef";    //char-字符类型,没有字符串类型哦
return 0;
}

那这两种形式有什么区别呢?
我们不写arr[ ]里面的数字,我们来看一下

#include<stdio.h>

int main()
{
char arr1[]="abcdef";
char arr2[]={'a','b','c','d','e','f'};

//我们打印一下这些字符串
printf("%s\n",arr1);
printf("%s\n",arr2);

return 0;
}

运行的结果:
abcdef
abcdef烫烫烫烫烫abcdef
请添加图片描述
哎,发现没有,它们不一样了那为什么会出现这种情况呢?

先想一个问题,它是根据什么来停止打印的?
(啊,你会问:它们后面啥都没有,我怎么会知道它们根据什么来停下来的)
那里确实看不见有什么标志,但是那个标志就是看不见的字符串的结束标志是\0,它是一个我们马上就会学到的转义字符

char arr1[]="abcdef";

这个形式一,字符串后面就默认带了一个\0

char arr2[]={'a','b','c','d','e','f'};

这个形式二,后面没有\0

懂了吧,printf去打印的时候要识别到\0才会结束

第一个形式最后一个字符结束就识别到了\0,然后结束
第二个形式识别到最后的f,一直都没有识别到\0,就一直打印下去,最后就出现刚才的结果

那么如果我们给第二个形式加一个\0作为结束标志怎么样,不要光想,我们来做一下试试

#include<stdio.h>

int main()
{
char arr1[]="abcdef\0";   //我们也试一下给它也加一个\0
char arr2[]={'a','b','c','d','e','f','\0'};

//我们打印一下这些字符串
printf("%s\n",arr1);    //%s是打印字符串的
printf("%s\n",arr2);    //%s是打印字符串的
 
return 0;
}

运行的结果:
abcdef
abcdef
请添加图片描述
结果运行正常了

那么\0算不算里面的字符串长度的一部分呢?
又来介绍一个好东西,strlen,它可以计算一个字符串长度的函数,但是使用它还是跟以前一样,需要给另一个头文件string.h打一下招呼才能使用它,我们来实操一下:

#include<string.h>
#include<string.h>

int main()
{
	char a[] = "abc";
	char b[] = "abc\0";
	printf("%d", strlen(a));
	printf("%d", strlen(b));
	return 0;
}

运行结果:
3
3
请添加图片描述

"abc"

这个字符串的长度为3,所以我们可以知道看不见的\0并不算在长度里面的,就算在后面加上\0也是一样

大家可以试一试计算一下第二种形式不加\0情况下的字符串长度,保持好奇心,去自己尝试一下。

就这样,我们把"abcdef"这个数组储存起来了,那我们要使用里面的字符怎么办?我们还需要再了解一个知识:

调用arr里面字符,用arr[2]就可以调用c,用arr[0]就可以调用a,它们的对应关系也就是:

 a  b  c  d  e  f
 0  1  2  3  4  5

我们来实验一下

#include<stdio.h>

int main()
{
char arr[]="abcdef";
printf("%c",arr[2]);
return 0;
}

运行结果:
a
请添加图片描述

#include<stdio.h>

int main()
{
char arr[]="abcdef";
printf("%c",arr[0]);
return 0;
}

运行结果:
a
请添加图片描述
今天结束

作者的悄悄话

悄悄地说:“歪?关注一下作者吧,不关注留个赞也行啊,不留赞评论一下我也行啊,啊?啥都不留?奶奶的,你关注一下我,让我顺着关注去找你理论理论,问问你为啥什么也不留

  • 48
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 64
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小奔同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值