Appearance
C 语言笔记
前置知识
计算机程序设计语言主要分为:机器语言,汇编语言,高级语言
一个完整的 c 语言程序由一个 main() (主函数) 和若干个其他函数组合而成的,main() 有且仅有一个
函数是 c 语言程序的基本单位,程序从 main() 开始执行
所有语句以分号结束,一行可以写多个语句,一句也可以写在多行
// c 不看 \n , 只看 ;
c 语言的扩展名一般为 .c , 目标程序的扩展名通常为 .obj , 可执行程序的扩展名通常为 .exe
// .cpp 通常为 c++ 的源代码
c
// 这是单行注释
/*
这是
多行
注释
*/以 # 开始的是编译预处理命令,结束不用加 ;(其不是 c 语言语句)
stdio.h // 标准输入/输出头文件
用户不能将 c 语言关键字用于自定义的标识符 (例如变量名)
A 的 ascii 码值是 65 , a 的 ascii 码值是 97 , 两者相差 32
plaintext
Dec Hex Char | Dec Hex Char | Dec Hex Char | Dec Hex Char
0 00 NUL | 32 20 SP | 64 40 @ | 96 60 `
1 01 SOH | 33 21 ! | 65 41 A | 97 61 a
2 02 STX | 34 22 " | 66 42 B | 98 62 b
3 03 ETX | 35 23 # | 67 43 C | 99 63 c
4 04 EOT | 36 24 $ | 68 44 D | 100 64 d
5 05 ENQ | 37 25 % | 69 45 E | 101 65 e
6 06 ACK | 38 26 & | 70 46 F | 102 66 f
7 07 BEL | 39 27 ' | 71 47 G | 103 67 g
8 08 BS | 40 28 ( | 72 48 H | 104 68 h
9 09 TAB | 41 29 ) | 73 49 I | 105 69 i
10 0A LF | 42 2A * | 74 4A J | 106 6A j
11 0B VT | 43 2B + | 75 4B K | 107 6B k
12 0C FF | 44 2C , | 76 4C L | 108 6C l
13 0D CR | 45 2D - | 77 4D M | 109 6D m
14 0E SO | 46 2E . | 78 4E N | 110 6E n
15 0F SI | 47 2F / | 79 4F O | 111 6F o
16 10 DLE | 48 30 0 | 80 50 P | 112 70 p
17 11 DC1 | 49 31 1 | 81 51 Q | 113 71 q
18 12 DC2 | 50 32 2 | 82 52 R | 114 72 r
19 13 DC3 | 51 33 3 | 83 53 S | 115 73 s
20 14 DC4 | 52 34 4 | 84 54 T | 116 74 t
21 15 NAK | 53 35 5 | 85 55 U | 117 75 u
22 16 SYN | 54 36 6 | 86 56 V | 118 76 v
23 17 ETB | 55 37 7 | 87 57 W | 119 77 w
24 18 CAN | 56 38 8 | 88 58 X | 120 78 x
25 19 EM | 57 39 9 | 89 59 Y | 121 79 y
26 1A SUB | 58 3A : | 90 5A Z | 122 7A z
27 1B ESC | 59 3B ; | 91 5B [ | 123 7B {
28 1C FS | 60 3C < | 92 5C \ | 124 7C |
29 1D GS | 61 3D = | 93 5D ] | 125 7D }
30 1E RS | 62 3E > | 94 5E ^ | 126 7E ~
31 1F US | 63 3F ? | 95 5F _ | 127 7F DEL非零即为真
C
变量
命名要求:^[a-zA-Z_][a-zA-Z0-9_]*$ (由字母,数字,下划线组成,第一位不可为数字,大小写敏感)
变量必须 先定义,后使用
同时定义多个变量时,变量名使用 , 隔开
c
// For example:
int a, b, c;数据类型
- 整型
- 基本:
int - 无符号:
unsigned int - 短:
short int - 无符号短:
unsigned short - 长:
long int - 无符号长:
unsigned long
- 基本:
- 浮点 (具有小数点的实数)
- 单精度:
float - 双精度:
double
- 单精度:
- 字符:
char
- 字符
'a'[a] - 字符串
"a"-> [a,\0],\0为结束符
运算符
一个操作数的:单目; 两个操作数的:双目; 运算优先级: () > 单目 (运算符) > * , / , % > + , -
- 算数运算符
+正号 (单目)-负号 (单目)*乘法/除法%求余 (取模)+加法-减法
- 自增/自减 (单目)
- 后置
i++i--
- 前置
++i--i
- 后置
- 复合赋值运算符
x += y相当于x = x + yx -= y相当于x = x - yx *= y相当于x = x * yx /= y相当于x = x / yx %= y相当于x = x % yy *= y + z(后方为表达式) 相当于y = y * (y + z)
- 关系运算符
==等于
逗号运算符
将多个表达式连接起来
c
a=1,b=2,c=a*b整个表达式的值为最后一个表达式的值 其优先级最低 其具有左结合性
声明变量时 , 为分隔符
问号运算符
c 中唯一的三目运算符
c
<表达式>?<if true>:<if false>假设 i = 5
a = i++->a得到 5, 然后i变成 6.b = ++i->i先变成 6, 然后b得到 6.
赋值
由赋值运算符将一个变量和一个表达式连接起来的式子被称为 赋值表达式
c
<变量> = <表达式>将右侧表达式的值赋值给左边的变量
赋值运算符具有右结合性,即由右向左运算,x=(y=114) == x=y=114
表达式可以嵌套
两个整数相除为整数,舍去小数,如果一个数为负数,截断小数向零取整
当赋值运算符两边的操作数类型不一样时,将进行自动的类型转换,规则:把赋值运算符右侧表达式的类型转换成左侧变量的类型
将 float / double 的数据赋给整型时,通常舍弃 float / double 的小数部分
将 int 的数据赋给 float / double 类型的变量时,值不变,但以 float / double 型存储
两个不同类型的操作数进行计算时,按照
char,int,float,double的顺序从左到右将左侧操作数的数据类型转换成右侧操作数的类型再进行计算
float必须转换成doublechar,short必须转换成int
两个不同类型的操作数进行计算时
- 进行整型提升:所有 narrower integer 类型(char、signed/unsigned char、short、_Bool)在表达式中先被提升到 int 或 unsigned int
- 应用常见算术转换决定共同类型:如果任一操作数为 double → 两者都转换为 double;否则若任一为 float → 两者都转换为 float;否则为整数类型,按宽度和有无符号性决定(可能转换为 unsigned long 等)
格式字符
d10 进制整数o8 进制整数,不输出前导符0x16 进制整数,不输出前导符0xu10 进制无符号整数c字符,只输出一个字符s字符串f小数,隐含输出 6 位小数
| 函数 | 附加格式说明字符 | 说明 |
|---|---|---|
printf(), scanf() | l | 标识长整形,用于 d, o, x, u 等表示整型的格式字符前,例如 %ld |
转义字符
\n换行\t跳到下个输入区 (tab)\r回车\0结束符\\\\''\1148 进制\x11416 进制
宏命令
常量
常量在运行过程中不可变,名称习惯上为大写
c
// For example:
#define NAME 1145分类
- 整型
- 10 进制 (
1) - 8 进制 (
01) - 16 进制 (
0x1)
- 10 进制 (
- 实型 (浮点型)
- 字符型
- 字符串型
函数
- getchar() 从标准输入获取内容