C 语言学习记录:字符串、转义字符与注释

在 C 语言的学习体系中,字符串、转义字符和注释是非常重要的基础内容。它们不仅是构建复杂程序的基石,还能帮助我们更高效、准确地编写和理解代码。接下来,就让我们深入学习这部分知识。

一、字符串

1.1 字符串的定义

在 C 语言中,字符串被定义为由双引号(" ")括起来的一串字符,也被称为字符串字面量。不过,C 语言本身并没有像int、char这样专门的字符串类型。那我们该如何存储字符串呢?答案是使用数组。

1.2 字符串的存储

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main() {

// 字符组成的串,就是字符串

char arrs[10] = "abcd";

// 当然,也可以自动开辟空间

char datas[] = "Hello,world";

return 0;

}

​编辑在上述代码中,第一种方式char arrs[10] = "abcd"; ,我们手动指定了数组的大小为 10,用来存储字符串 "abcd" ,注意这里虽然字符串只有 4 个字符,但实际上数组还需要一个位置来存储字符串结束标志\0 。第二种方式char datas[] = "Hello,world"; ,编译器会根据字符串的内容自动计算并分配足够的空间,同样也会预留一个位置给\0 。

​编辑

这里需要特别注意的是,字符串的结束标志是一个\0的转义字符,它并不作为字符串的内容,但对于字符串的处理至关重要。

1.3 字符串和字符数组

字符串和字符数组虽然看起来相似,但存在本质区别。

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main() {

char name01[] = "1234";// 自动在结束时,添加\0

char name02[] = {'1','2','3','4'};

printf("%s\n", name01);

printf("%s\n", name02);

return 0;

}

编辑

在这个例子中,name01是一个字符串,编译器会自动在其末尾添加\0作为结束标志。当使用printf("%s\n", name01); 打印时,会正确输出1234 。而name02是一个字符数组,它没有自动添加的结束标志。当使用printf("%s\n", name02); 打印时,由于没有结束标记,它会持续打印内存中其他部分的内容,直到遇到一个\0 ,这可能会导致输出一些意想不到的乱码。

再看下面这个例子,更能体现出字符串结束标志\0的重要性。


#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>

int main() {

// Fn + F10调试,可以发现字符串数组,最后以\0结尾

char arr1[] = "abcd";// 字符串

char arr2[] = { 'a','b','c','d' };// 字符数组

// strlen() 求字符串的长度,但是要引入头文件:#include <string.h>

int lenth1 = strlen(arr1);

int lenth2 = strlen(arr2);

printf("%d\n", lenth1);// 4 所以字符串底层\0是有意义的

printf("%d\n", lenth2);// 33 遇到下一个\0之前,有33个内容需要计算

return 0;

}

编辑

strlen()函数用于计算字符串的长度,它需要引入<string.h>头文件。对于arr1这个字符串,strlen(arr1)返回 4,因为它包含 4 个字符,并且以\0结尾。而对于arr2这个字符数组,由于没有\0 ,strlen(arr2)会一直向后读取内存,直到遇到\0 ,所以返回的结果是一个不确定的值(这里是 33,具体值取决于内存中的数据)。

如果我们想要让字符数组正确表示一个字符串,就需要手动添加\0 。例如:


char arr2[] = {'a','b','c','d','\0'};// 字符数组

这样,arr2就可以像字符串一样被正确处理和打印。

二、转义字符

2.1 转义字符的定义

转义字符是一种特殊的字符,它能够转变字符原先的含义,赋予其其他特殊的含义。在 C 语言中,有许多预定义的转义字符。

2.2 常见转义字符列举

转义字符

含义

\n

换行符,将光标移动到下一行的开头

\t

制表符,用于在输出中创建水平制表位,通常相当于 4 个空格

\\

反斜杠字符本身,因为反斜杠在转义字符中有特殊用途,所以用\\表示一个普通的反斜杠

\'

单引号字符,用于在字符常量或字符串中表示单引号

\"

双引号字符,用于在字符串中表示双引号

\0

空字符,也就是前面提到的字符串结束标志

​编辑

例如:


#include <stdio.h>

int main() {

printf("Hello,\nworld!");// 输出Hello, 换行后输出world!

printf("Hello,\tworld!");// 输出Hello, 然后一个制表位,再输出world!

printf("This is a backslash: \\");// 输出This is a backslash: \

printf("He said: \'Hello!\'");// 输出He said: 'Hello!'

printf("She said: \"Hello!\"");// 输出She said: "Hello!"

return 0;

}

三、注释

3.1 注释的作用

注释是一种描述代码含义、废弃代码或梳理思路的重要工具。它不会被编译器编译,只是为了方便程序员阅读和理解代码。

3.2 C 语言中的注释风格

在 C 语言中,有两种常见的注释风格:

  • 单行注释:使用// ,这是从 C++ 语言引入的注释方式,快捷键为Ctrl + / 。单行注释只能注释一行内容,例如:
// 这是一行单行注释,用于解释下面这行代码的作用

int num = 10;
  • 多行注释:使用/* */ ,这是 C 语言本身就有的注释方式,同样可以通过Ctrl + /快捷键来快速添加或取消(有些编辑器可能需要先选中多行再操作)。多行注释可以注释一段连续的代码块,例如:
/*

这是一段多行注释,

可以用来解释一段代码的功能、算法思路等。

下面这行代码是定义一个数组

*/

int arr[5] = {1, 2, 3, 4, 5};

需要注意的是,多行注释不能嵌套使用,例如下面这种情况是错误的:

/*

这是错误的多行注释嵌套

/* 这里是内层注释 */

*/

通过对字符串、转义字符和注释的学习,我们对 C 语言的理解又深入了一步。在实际编程中,合理运用这些知识,能够让我们的代码更加规范、易读。​

#初学者##算法##个人成长##C语言哈希表#
C语言学习记录 文章被收录于专栏

C语言的初步学习

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务