ASCII码值
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单
引号 括起来的,如:'a','b','@'。
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的
⼆ 进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编
码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准
ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。

参考:
https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以
但是我们最好能掌握⼏组特殊的数据:
• 字符A~Z的ASCII码值从65~90
• 字符a~z的ASCII码值从97~122
• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
• 数字字符0~9的ASCII码值从48~57
• 换⾏ \n 的ASCII值是:10
• 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
单个字符的打印可以使⽤%c来指定格式:
#include <stdio.h>
int main()
{
printf("%c\n", 'Q');
printf("%c\n", 81); //这里的81是ASCII值,对应的字符是Q,所以两个打印函数的结果一样
return 0;
}
#include <stdio.h>
int main()
{
int i = 0;
for (i = 32; i <= 127; i++)
{
printf("%c ", i);
if (i % 16 == 15)
printf("\n");
}
return 0;
}
//此代码实现了从ASCII码值32到127所以字符的输出
字符串和\0
C语⾔中如何表⽰字符串呢?使⽤
双引号括
起来的⼀串字符就被称为字符串,如:"abcdef",就是
⼀个字符串。字符串的打印格式可以使⽤
%s
#include <stdio.h>
int main()
{
printf("%s\n", "hello C");
printf("hello c");
return 0;
}
//两个printf效果一样
C语⾔字符串中⼀个特殊的知识,就是在字
符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志。

对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏⼀个
\0
的
转义字符,
\0
是字符串的结束标志。所以我们在使⽤库函数
printf()
打印字符串或者
strlen()
计算字符串⻓度的时候,遇到
\0
的时候就⾃动停⽌。
#
include
<stdio.h>
int
main
()
{
char
arr1[] = {
'a'
,
'b'
,
'c'
};
//arr1
数组中存放
3
个字符
char
arr2[] =
"abc"
;
//arr2
数组中存放字符串
printf
(
"%s\n"
, arr1);
printf
(
"%s\n"
, arr2);
return
0
;
}
运行结果:

我们可以看到,
arr1
字符数组在打印的时候,打印了
a
、
b
、
c
后还打印了⼀些随机值,这就是
因为
arr1
在末尾的地⽅没有
\0
字符作为结束标志,在打印的时候没有停⽌。
但是
arr2
的打印就是完全正常的,就是因为
arr2
数组是使⽤字符串常量初始化的,数组中有
\0
作为技术标志,打印可以正常停⽌。
我们可以对arr1进行修改
:
char
arr1[] = {
'a'
,
'b'
,
'c'
,
'\0'
}; //添加了\0就可以正常运行了
转义字符
首先,什么是转义字符?
在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。
eg:字符n
当是 printf("abcndef"); 时输出为 abcndef
但当为 printf("abc\ndef"); 时结果为
\n
是⼀个转义字符表⽰换⾏的意思,我们可以简单的理解为
\
让
n
的意思 发⽣了转变, n
本来是
⼀个普通的字符,被
\
转义为换⾏的意思。
•
\'
:⽤于表⽰字符常量'
•
\"
:⽤于表⽰⼀个字符串内部的双引号
•
\\
:⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
•
\a
:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
•
\b
:退格键,光标回退⼀个字符,但不删除字符。(但是当\b之后有其他字符时,就会覆盖\b前一个字符)

•
\n
:换⾏符。
•
\r
:回⻋符,光标移到同⼀⾏的开头。(和\b有一样的效果)
•
\t
:制表符,光标移到下⼀个⽔平制表位,通常是下⼀个8的倍数。
下⾯2种转义字符可以理解为:
字符的8进制或者16进制表⽰形式
•
\ddd
:d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X(将八进制的130转换成十进制的数为88,那么88对应的字符是x)
•
\xdd
:d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0(十六进制的30转换成十进制的数为28,那么48对应的字符是0,为什么只有两个dd呢?因为两位十六进制的数就可以把ascii码值是123以内的全部表示完,所以不需要三个d)
\0
:null 字符,代表没有内容,
\0
就是
\ddd
这类转义字符的⼀种,⽤于字符串的结束标志,其
ASCII码值是0

转义字符参考:
https://zh.cppreference.com/w/c/language/escape