图书目录

  

  

  

  

  

  

  

第0章  笔试题自测 1

第1章  灵魂——指针 5

1.1  指针与字符串 5

1.1.1  知识点题型 5

101  p++ 5

102  打印内存地址 7

103  sprintf()与snprintf() 7

104  指针常量与常量指针 8

105  字符与字符串 9

106  指针变量与普通变量 10

107  指针运算 11

108 “%-10.5s” 11

1.1.2  综合题型 12

109  字符串复制 12

110  统计字符个数 14

1.2  指针与数组 16

1.2.1  知识点题型 16

111  一维数组与指针 16

112  数组中strlen与sizeof

     的区别 16

113  多维数组 17

114  数组作为参数传递给

     函数 19

115  char (*(*x())[5])()与

     typedef 19

1.2.2  综合题型 20

116  编程求较大数的

     阶乘 20

117  字符旋转 22

1.2.3  数组总结 25

1.3  指针与结构体 26

1.3.1  知识点题型 26

118  __attribute__((__packed__))

      含义 26

119  union与struct

     类型区别 28

1.3.2  综合题型 29

120  Little-endian与

     Big-endian 29

1.3.3  结构体总结 30

1.4  本章总结 31

第2章  数据存储——内存 32

2.1  数据类型的存储 32

2.1.1  知识点题型 33

201  char *a[3][4]占

     内存大小 33

202  int *p[M]与

     int (*p)[M] 33

203  数组元素指针与数组

     元素大小的计算 33

204  #define与typedef

     区别 34

205  sizeof(p) 35

206  关键字“static”修饰

     变量与函数 36

207  char不等于

     signed char 36

208  unsigned类型值与0

     的关系 37

209  不同数据类型的赋值 38

2.1.2  综合题型 39

210  验证C语言内存

     分配 39

2.2  内存相关的bug 41

2.2.1  知识点题型 41

211  返回栈地址 41

212  未初始化与内存访

     问越界 41

213  使用已释放的内存 42

214  数组越界 43

215  内存泄漏之内存

     释放顺序 43

216  内存泄漏之重新赋值 44

217  内存泄漏之谨慎使用

     函数返回值 45

218  内存泄漏之退出

     函数路径 47

2.2.2  综合题型 48

219  时间GeneralizedTime

     编码格式 48

220  浮点数的存储格式 49

221  实现小应用——

     万年历 51

2.3  本章总结 54

第3章  程序的思想——算法 56

3.1  基本数据结构 56

3.1.1  知识点题型 56

301  栈-迷宫问题 56

302  队列——旅行家的

     预算 62

303  链表——约瑟夫问题 69

304  二叉树遍历 71

305  Modbus CRC 72

3.1.2  综合题型 74

306  汉诺塔问题 74

307  找符合规则的数 77

3.2  查找与排序 78

3.2.1  查找 78

308  二分法查找 78

309  Hash查找 80

3.2.2  排序 83

310  选择排序 83

311  冒泡排序 84

312  插入排序 86

313  快速排序 87

3.3  综合试题 90

314  Colored Cubes 90

3.4  本章总结 95

第4章  程序的基本单位——函数 97

4.1  自定义函数 97

4.1.1  知识点题型 97

401  函数声明与定义 97

402  十六进制转十进制 99

403  函数纠错 101

404  找出子串的个数 102

405  指针函数与

     函数指针 103

406  回调函数 104

407  可变参数函数 106

408  函数调用 108

409  内联(inline)函数 110

410  main()函数的命令行

     参数 112

4.1.2  综合题型 114

411  hexdump()函数 114

412  Sequence of Function 

     Execution 115

4.2  库函数 116

4.2.1  知识点题型 117

413  调试相关的宏 117

414  大小写字母的转换 117

415  文件操作 119

416  数学库 122

4.2.2  综合题型 123

417  All Combinations 

     of a Word 123

4.2.3  库函数总结 128

4.3  本章总结 128

第5章  数据的传递——网络 130

5.1  网络基础 130

5.1.1  知识点题型 130

501  网络字节序 130

502  IP地址转换 131

503  设计数据报文头

     结构 133

504  IP头校验和 135

5.1.2  综合题型 137

505  RC4 Algorithm 137

506  解析URL 141

5.2  Linux Socket编程 143

5.2.1  TCP Socket APIs 143

5.2.2  UDP Socket APIs 146

5.2.3  典型试题 148

507  实现简单ping命令 148

508  实现HTTP GET  156

509  Blocking和Non-

     blocking 160

510  select()函数用法 161

511  fork()与pthread_

     create() 166

5.3  综合试题 170

512  SYN洪流攻击 170

5.4  本章总结 179

第6章  专用的计算机系统——

嵌入式 181

6.1  嵌入式编程基础 181

601  对寄存器的位操作 181

602  register关键字 182

603  *(volatile unsigned 

     long *)0xfff40080; 183

604  #ifdef、#if、#if defined

     和#ifndef 183

605  –1在内存中的表示 184

606  找出重复的数 185

607  #define中的“##”

     与“#” 186

608  计算一个整数中含

     1的比特数 187

609  递归计算 188

610  数值溢出运算 189

611  定义boolean类型 189

612  for()、while()

     与do{ }while() 189

613  位域应用 190

614  break与continue的

     区别 191

615  指针偏移计算 193

616  判断链表是否

     存在环 194

617  const与指针 196

618  指向绝对地址执行 196

619  同名变量(全局变量

     与局部变量) 197

620  gets()与fgets() 198

621  头文件重复引用 199

6.2  可移植性 200

622  u8、u16、u32

     和u64 200

623  条件编译 200

624  转义字符问题 202

625  提高可移植性

     常见技巧 203

6.3  代码优化 203

626  i--与i < 10 203

627  switch代替

     if…else… 204

628  代码优化的

     常见技巧 205

6.4  综合试题 205

629  模拟Modbus

     协议 205

6.5  本章总结 209

第7章  终结语 211

7.1  编程习惯 211

7.2  Bug案例 214

7.3  学习技巧 217

7.4  本章总结 220

附录A  ASCII码表 221

附录B  C语言运算符优先级 223

附录C  标准C头文件 225

参考文献 226

??

??

??

??