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语言的初步学习