文章目录
- 1. 字符串
- 2. 转义字符
- 转义字符表
- 常见转义字符
- 3. 注释
1. 字符串
“hello world.\n”
- 上面这种由双引号引起的一串字符就被称为字符串;
字符串的存储
- C 语言当中没有字符串类型,如果想要将字符串存储起来的话就需要用到字符串数组。
#include <stdio.h>
int main()
{
char arr [] = "abcdef" ;//7字节
//使用字符串数组将 abcdef 这串字符存储起来
return 0;
}
字符串结束标志
- 字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
- 上面那段代码中,看起来只有 abcdef 这6个字符,实际上在字符串末尾还藏着个 \0 占一个字节的坑位。
#include <stdio.h>
int main()
{
char arr[] = {'a','b','c','d','e','f'};
//这种情况下 C 语言不会自动添加 \0 进去作为结束标志,所以这串字符占6字节
return 0;
}
字符串没有 \0 的后果
- 在正常自带 \0 的 arr1 字符串中,可以正确的将字符串打印出来。
- 而在不带结束标志 \0 的 arr2 字符串中,只有在遇到 \0 的时候才算打印完成,所以在打印 arr2 的时候会在 f 后面一直找随机数,直到刚好随机到 \0 的时候此时才会被判断成该字符串结束,然后将其打印出来。
#include <stdio.h>
int main()
{
char arr1 [] = "abcdef" ;//用双引号括起来的字符,字符串末尾自动添加 \0
char arr2 [] = { 'a','b','c','d','e','f' };//这种情况下C语言不会自动添加 \0 进去作为结束标志,所以这串字符占6字节
char arr3 [] = { 'a','b','c','d','e','f','\0' };//在 arr2 的基础上主动添加一个 \0 也是一个正常的字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
2. 转义字符
转义字符
- 转变原来字符的意思
举个例子
- 此时转义字符 \ 就将一个普通的字符 n 转换成一个换行符了。
转义字符表
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\’ | 用于表示字符常量 ’ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd 表示 1-3 个八进制的数字。如:\130 X |
\xdd | dd 表示 2 个十六进制的数字。如:\x30 0 |
常见转义字符
1. 转义字符 “ \? ”
- 在书写连续多个问号时使用,防止他们被解析成三字母词。
- 三字母词:早起某些编译器底下,在字符串中遇到多个问号+括号时可能结果和想象有所出入。
??) 会转变成 ]
??( 会转变成 [
- 此时加上一个转义字符 \ 让 ? 就是一个单纯的小问号。
2. 转义字符 “ \’ ”
- 用于表示字符常量 ’
#include <stdio.h>
int main()
{
printf("%c\n", ''');
//用两个单引号框柱一个单引号并不能准确打印出一个单引号
//第二个单引号会先和第一个单引号结合,第三个就无人认领
printf("%c", '\'');//正确打印出一个 ' (单引号)
return 0;
}
3. 转义字符 “ \" ”
- 和 \’ 类似,就是为了打印一个双引号 ” 出来。
//打印一个双引号
#include <stdio.h>
int main()
{
printf("""); //第二个双引号先与第一个结合,第三个又落单了
printf("\"");//正确打印一个双引号
return 0;
}
4. 转义字符 “ \\ ”
- 用于表示一个反斜杠,防止它被解释为一个转义序列符。
//打印一个反斜杠 \
#include <stdio.h>
int main()
{
printf("abcd\\ef" );//让反斜杠单纯的就是一个反斜杠
return 0;
}
5. 转义字符 “ \b ”
- 退格符
//退格符://有几个 \b 就从右往左退几格,并将该位置字符删除
#include <stdio.h>
int main()
{
printf("abcdef\b\b");
printf("\nabcdef\b\b\b");
return 0;
}
6. 转义字符 “ \n ”
- 换行,用的最多了。
#include <stdio.h>
int main()
{
printf("abc\ndef");//将会打印出abc与def在二行中
return 0;
}
7. 转义字符 “ \t ”
- 水平制表符,功能相当于键盘上的 TAB 键。
8. 转义字符 “ \ddd ”
- ddd 表示 1-3 个八进制的数字,将三个八进制的数转义成对应的十进制。如:\130 X
//转义字符 \ddd
#include <stdio.h>
int main()
{
printf("%c\n", '\130');
//先将八进制的130转成对应的十进制 88,再打印出对应ASCII表中字符
return 0;
}
9. 转义字符 “ \xdd ”
- dd 表示 2 个十六进制的数字,将两个人十六进制的数转义成对应十进制。如:\x30 0
//转义字符 \xdd
#include <stdio.h>
int main()
{
printf("%c\n", '\x30');
//将十六进制的 30 转成对应的十进制数 48,再打印出对应ASCII表中字符
return 0;
}
3. 注释
- 代码中有不需要的代码可以直接删除,也可以注释掉。
- 代码中有些代码比较难懂,可以加一下注释文字。
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0;
}
注释风格
- C语言风格的注释 /* xxxxxx */
- 缺陷:不能嵌套注释
- C++风格的注释 //xxxxxxxx
- 可以注释一行也可以注释多行
务必养成写注释的习惯
- 注释可以梳理代码;
- 对复杂的代码进行解释;
- 写代码的时候写注释,是利人利己的。