002 初识C语言 - 字符串、转义字符、注释

1 字符串

  • "abcdef" 这种由双引号引起来的一串字符,称为字符串字面值,或者简称字符串。
  • 字符串就是字符数组,好多个字符串起来的一组数据。
int main()
{
	char c = 'c';//定义了一个字符数据类型c
	
	"abcdef" ;// 这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
	return 0;
}

注: c语言中有字符类型没有字符串类型,若想存储需要放入字符数组中。

如下:

int main()
{
	char arr[] = "abcdef"; // 存储字符串
	return 0;
}

既然字符串存储在字符数组中,那么数组中存储了哪些东西呢?

  1. 在VS中按F10对代码进行调试,页面左端会显示黄色的小三角(如下图所示),三角号到哪行代码即运行到哪行,按一次F10 运行一行,直到运行到最后一行。

请添加图片描述

  1. 调试后,点击 调试->窗口->监视->监视(1)

请添加图片描述

  1. 输入监视的对象,此文中为arr , 并展开。

请添加图片描述

我们发现数组arr大小为7并不是6,除了所要存储的 abcdef 外还另外放入了 \0 ,说明还默认存储了一个 \0 ,这个 \0 即为字符串的结束标志

\0 作为字符串的结束标志非常重要

为什么重要呢?

思考以下代码输出结果:

#include <stdio.h>

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = { 'a','b','c','d','e','f' };
	char arr3[] = { 'a','b','c','d','e','f','\0'};
	
	printf("%s\n", arr1); // %s 为输出字符串
	printf("%s\n", arr2);
	printf("%s\n", arr3);

	return 0;
}

输出结果:

abcdef
abcdef烫烫烫烫烫abcdef
abcdef

解释:

  1. 首先查看一下 arr1 和 arr2 存储的内容

请添加图片描述

arr1用字符串初始化,编译系统会自动加入 \0 ,所以arr1中有 \0 ; 当我们主动给arr2中放入 abcdef ,数组中并没有 \0

  1. 当我们用 %s 输出字符串时,输出结果为:

请添加图片描述

字符串作为一维数组存放在内存中,当程序遇到 \0 时判断字符串结束,如果没遇到,编译器自动向后打印直到遇见 \0 结束 。

对于arr1
请添加图片描述

数组 arr1 从 a 开始输出,遇到 \0 结束,arr1是以字符串初始化,所以编译系统会默认加入 \0
在计算字符串长度的时候 \0 是结束标志,不算作字符串内容,不打印。所以arr1打印结果为 abcdef

对于arr2
请添加图片描述

当我们主动给arr2中放入 abcdef ,编译系统并不会自动加入 \0
数组arr2也是从 a 开始打印,但是不同的是 arr2 中并没有 \0 ,而且arr2后面还有内存,内存中存储了其他内容,所以程序继续往后打印,直到遇到了一个 \0 结束打印,这就是为什么arr2会打印我们指定外的内容。

对于arr3
请添加图片描述

arr3中主动添加 \0 和arr1效果相同。

总结:

  • c语言中没有字符串类型,若想存储需要放入字符数组中。
  • 字符串的结束标志是一个 \0的转义字符。在计算字符串长度的时候 \0是结束标志,不算作字符串内容。

2 转义字符

2.1 概念

C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符。

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\`用于表示字符常量`
\"用于表示一个字符产内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。如:\130
\xdddd表示2个十六进制数字。如:\x30

2.2 详解

2.2.1 \?

早期编译器会把三字母词 ??) 解析成 ] ;把三字母词 ??( 解析成 [ 。若不想这样解析,在问号前面加上 \ ,此时的 ? 不再是三字母词里的问号。目前编译器不在支持三字母词。

2.2.2 \'

当想打印字符 ' 时,按如下编写会报错。

请添加图片描述

因为编译器把前两个单引号看成了一对,认为前两个单引号中间括了一个字符,最后一个单引号落单了,编译器无法解析。

在中间单引号前加 \ 转义即可,让它单纯的就是一个单引号。

int main()
{
	printf("%c\n", '\'');

	return 0;
}
2.2.3 \"

当想打印字符 " 时,用 \",与 \' 道理相同。

int main()
{
	printf("%s\n", "\"");

	return 0;
}
2.2.4 \\

\ 转义成单纯的斜杠。

当打印字符串 abcd\0ef 时只会输出 abcd ,因为遇到了字符串的结束标志\0,此时在 \ 前在加一个 \ ,把斜杠转移成普通的斜杠,不让\0 组成转义字符。

int main()
{
	printf("abcd\\0ef");
	return 0;
}

// 结果
// abcd\0ef
2.2.5 \n\r

\n : 对输出进行换行

\r : 对输出进行回车

2.2.6 \t

和电脑的Tab键效果相同。

2.2.7 \ddd

ddd表示1~3个八进制的数字。如:\130。130为八进制的数字(幺叄零),不是一百三。

当打印 \130 时打印出来的是大写的X

请添加图片描述

因为 \ddd 表示的是8进制的ddd转换成10进制的数字,即8进制的130,转换成10进制的88, 而88在ASCII码上对应的即为大写的X,所以打印字符88,即打印88在ASCII码上对应的值X。

请添加图片描述

2.2.8 \xdd

dd表示2个十六进制数字。如:\x60 。\x60 是将60这个十六进制的数字转换成十进制的96。然后打印出96对应的ASCII码的值。

总结:

只需知道 \? \' \" \\ \n \r \t \ddd \xdd 即可。

3 注释

注释是对代码的解释和说明文字。

C语言中的注释分为两种:

3.1 C++风格的注释

// 这是单行注释文字

3.2 C语言风格的注释

/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/

3.3 使用的技巧

​如果我们要对代码进行解释,那么就可以使用注释。

​当注释的内容比较少,一行就写完了,可以用C++风格的注释。

​如果注释的内容比较多,需要写在多行,那么可以使用C风格的注释。

3.4 注意

注释的内容不会参与编译和运行的,仅仅是对代码的解释说明而已。

​所以,不管在注释当中写什么内容,都不会影响代码运行的结果。

C语言风格的注释不能嵌套注释

C++风格的注释可以注释一行也可以注释多行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值