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 | 不清楚为啥,慎用 |