C语言初阶第二篇:换我心,为你心,始知C语言 从程序调试到全网最详细字符串教学来喽
作者:互联网
换我心,为你心,始知C语言
老铁们,我们这个系列的上一篇文章讲到了变量常量,那么今天我们就继续说一说之后的一些知识框架,保证零基础也能看懂,废话不多说,我们开始吧!
第二篇
一、探讨字符串
C语言是没有字符串类型的变量的,需要使用字符串,我们只能定义字符数组来接受。
如:
int main()
{
char arr1[] = "abc";//用字符串来初始化字符数组
char arr2[] = { 'a','b','c' };
return 0;
}
像上面的 “abc” 它其实在尾部隐藏了一个‘\0’,
而下面的 { ‘a’ , ‘b’ , ‘c’ } ,结尾没有 ‘\0’,那它是不是字符串呢?
我们就需要理解一下字符串:
由于字符串本质上其实就是以 ‘\0’ 作为结尾的特殊字符数组,所以定义字符串时,必须保证字符串存储的最后一个元素为 ‘\0’ ,所以下面的就不是字符串(没有结束标志)。
如下:
更改一下:
这样就又是一个字符串了,所以,字符串必须有结束标志,跟如何定义无关。
我们一会讨论断点调试的时候会提及隐藏’\0’的问题。
二、插入知识点程序调试
我们再书写代码的时候,都想要使用调试的功能,那么调试应该怎么打开呢?今天我们就说一说断点和监视的功能:
平常我们打断点,就可以使用快捷键ctrl+alt+b,再直接点击如图的地方,就可以显示断点的信息:
那么,有了断点,我们就需要明白如何调试,这里我们使用监视这个功能,但是我们也看到了,打开 调试 — 窗口 之后,没有显示监视的页面,为什么?这时候我们需要F5先运行代码(注意,断点要打了,不然没效果):
此时就可以看到监视了,我们来看看实际效果:
我们看到了字符串两种赋值方式的区别,达到了预期(如果下面一种赋值给定长度是4,那么也跟第一种赋值一样)。
(可以使用库函数strlen来查看两个的长度区别,strlen计算的是 ‘\0’ 之前的个数,我们在之后的文章里会模拟实现这个功能,想要提前了解的,可以看一看笔者写的递归的博客,有详细介绍。)
三、转义字符和注释
3.1 转义字符
转译字符,大部分人都知道常用的 ‘\0’ , ‘\n’ ,那么我们就来介绍一些不一样的,在以前的编译器种存在三字母词:
??) ---------- ] 也就是如果你输入了 ??) 那么它会转译成 ]
??( ---------- [ 如果你输入了 ??( 那么它会转译成 [
所以我们的转译字符中才会存在 ’ \ ? ’ ,就是为了防止字符被解析成三字母词
(仅做介绍,不必掌握)
那么如果我们想打印单引号 ’ 或者百分号 % 该怎么办?因为我们都知道,单引号用来扩起字母,百分号用来格式化输出,其实解决也很简单,如下面代码所示:
#include<stdio.h>
int main()
{
printf("%c\n",'\'');
//输出结果是 '
printf("%%\n");
//输出结果是 %
return 0;
}
也就是说,打印单引号,我们需要斜杠转译,打印百分号,我们需要输入两个百分号。
斜杠双引号也是同理:
printf("%c\n",'\"');
//输出结果是 "
那么现在应该无师自通,也理解了 “ \ \ ” 的含义了,就是防止转译,输出 " \ ",如下图: (当我们打开文件路径的时候,就应该使用 \ \ ,为了防止路径的字母被转译)
#include<stdio.h>
int main()
{
printf("C:\ana\test\test.c\n");
//输出结果是 C:na est est.c
printf("C:\\ana\\test\\test.c\n");
//输出结果是 C:\ana\test\test.c
return 0;
}
结果如图:(’ \ a ’ 会有报警的声音 ,也就是蜂鸣, 可以用上面的代码试一试)
’ \t ’ 就是水平制表符,结果也显而易见了。那么 ‘ \b ’ 有什么用?退格,用的很少,用一个代码演示一下:
printf("abcdefg\b");
//输出结果是abcdef,少了一个g,退格的操作
而回车(’ \r ‘)和换行(’ \n ')的区别,就在于回车是回到首部,换行是回到首部又开启下一行。
那么现在,我们来看一看这非常特殊的两个:
’ \ddd ’ 和 ’ \xdd ’ ,前者表示1~3个八进制字符,后者表示2个十六进制数字
printf("%c\n",'\130');
//输出结果是 X
printf("%c\n", '\x41');
//输出结果是 A
这个就是ASCII编码,ASCII编码记住两个值:A ----- 65 a ----- 97 其他的字母都是顺延,比如 B ----- 98。
这个转义 ’ \130 ’ 是比较坑的,因为它转义的是八进制
那么我们为什么说上面的130是ASICII编码?我们来看一下它的八进制结果:
82+3 * 81+0 * 80 = 88 , 88对应的ASCII码就是大写的X,所以输出X。
下面的 ’ \x41 ’ 则是转义十六进制
所以下面的 \x41 就是 4 * 161 + 1 * 160 = 65,代表的字符也就是A。
那么我们这里再注意一个点,关于转译字符求字符长度:
printf("%d\n", strlen("C:\ana:\test:\test.c"));
//结果是 17
printf("%d\n", strlen("C:\\ana:\\test:\\test.c"));
//结果是 20
不多做解释。
3.2 注释
1、注释是用来解释代码
2、注释可以注释一些不需要的代码
单行注释我们使用 // 这是C++的注释风格
多行注释我们使用 /* */ 这是C语言的注释风格,不支持嵌套注释
但是使用C语言的注释有一个缺陷:
为什么?因为"/ * "会去寻找下一个 " * / ",一旦找到了,就是注释的区域。所以最后一个 ” * / “ 就没用了。
那么今天的分享就到这里了,希望给你带来了帮助。
标签:输出,初阶,程序调试,C语言,注释,test,printf,字符串,我们 来源: https://blog.csdn.net/awaitxm/article/details/122619113