Blame

11fc07 Qwas 2024-03-22 07:46:36 1
# char类型
2
3
## 字符常量
4
5
在C语言中,用单引号括起来的单个字符被称为**字符常量**(character constant)。
6
7
char类型用于存储字符(如,字母或标点符号),但是从技术层面看,char是整数类型。因为实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。最常用的编码是ASCII编码。
8
9
10
## 用转义序列表示
11
12
转义序列(\0oo和\xhh)是ASCII码的特殊表示。
13
ee1465 Qwas 2024-03-22 07:56:23 14
https://replit.com/@qwasfun/QuarrelsomeRemoteOutlier#main.c
11fc07 Qwas 2024-03-22 07:46:36 15
16
```c
17
#include <stdio.h>
18
19
int main() {
20
char ch1 = 65;
21
char ch2 = 'A';
22
char ch3 = '\101';
23
char ch4 = '\x41';
24
char ch5 = '\n';
25
printf("%c, %c, %c, %c, %c", ch1, ch2, ch3, ch4, ch5);
26
printf("========\n");
27
28
char ch00 = '8';
29
char ch01 = 56;
30
char ch02 = '\70';
31
char ch03 = '\070';
32
char ch04 = '\77';
33
char ch05 = '\100';
34
char ch06 = '\0100';
35
printf("%c, %c, %c, %c, %c, %c, %c\n", ch00, ch01, ch02, ch03, ch04, ch05, ch06);
36
}
37
```
38
39
```text
40
A, A, A, A,
41
========
42
8, 8, 8, 8, ?, @, 0
43
```
44
45
::: warning
46
最后一个字符异常输出
47
:::
48
49
如果要用八进制ASCII码表示一个字符,可以在编码值前面加一个反斜杠(\)并用单引号括起来。可以省略前面的0,'\70'甚至'\070'都可以。即使没有前缀0,编译器在处理这种写法时,仍会解释为八进制。
50
51
52
> 添加前缀的0时,只能输出最大为 077 的八进制数,否则会提示 `multi-character character constant`
53
54
```text
55
char_print.c:17:15: warning: multi-character character constant [-Wmultichar]
56
17 | char ch05 = '\0100';
57
| ^~~~~~~
58
char_print.c:17:15: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘2096’ to ‘48’ [-Woverflow]
59
```
60
不清楚为啥,慎用