《C/C++/C#程序员实用大全 C/C++/C#最佳编程指南》PDF下载

  • 购买积分:28 如何计算积分?
  • 作  者:(美)Kris Jamsa著;张春晖等译
  • 出 版 社:中国水利水电出版社
  • 出版年份:2002
  • ISBN:7508411897
  • 页数:1144 页
图书介绍:本书通过对大量程序实例的分析,深入浅出地讲解了C/C++/C#语言基本知识、编译方法和程序设计技术,并给出了众多的编程技巧与应用。

第一章 C语言入门 1

1 编程简介 1

3 编译C程序 2

2 创建ASCII码源文件 2

4 语法错误 3

6 往程序里添加语句 4

5 典型的C程序结构 4

8 C语言区分大小写字母 5

7 在新的一行上显示输出结果 5

10 程序开发过程 6

9 逻辑错误(BUG) 6

12 进一步了解连接器 7

11 文件类型 7

14 帮助编译器查找头文件 8

13 头文件 8

16 注释程序 9

15 加速编译 9

18 注意编译器警告信息 10

17 提高程序的可阅读性 10

21 名字的重要性 11

20 用注释屏蔽语句 11

19 控制编译器警告 11

23 变量 12

22 分号的作用 12

27 定义变量时加上注释 13

26 定义同一类型的多个变量 13

24 给变量赋值 13

25 变量类型 13

31 C关键字 14

30 使用有意义的变量名 14

28 给变量赋初值 14

29 在定义时初始他多个变量 14

33 字符型变量 15

32 整型变量 15

35 双精度型变量 16

34 浮点型变量 16

38 无符号类型标识符 17

37 类型标识符 17

36 给浮点型变量赋值 17

39 LONG(长)类型标识符 18

42 寄存器类型标识符 19

41 使用大数值 19

40 联合使用无符号和长类型标识符 19

45 有符号类型标识符 20

44 从类型申明中去掉INT 20

43 短(SHORT)类型标识符 20

48 创建用户自己的类型 21

47 把变量的值赋给另一种类型的变量 21

46 多赋值运算符 21

50 溢出 22

49 赋给十六进制或八进制值 22

51 精确度 23

53 PRINTF入门 24

52 赋值为引号或其他字符 24

55 打印八进制或十六进制整数 25

54 使用PRINTF显示整型数值 25

57 用PRINTF显示长整型数值 26

56 用PRINTF显示无符号整型数值 26

60 用指数格式显示浮点数 27

59 用PRINTF显示字符型数值 27

58 用PRINTF显示浮点型数值 27

62 用PRINTF显示字符串 28

61 显示浮点数 28

65 用PRINTF格式化整数值 29

64 在数值前添加正号和负号 29

63 用PRINTF显示指针地址 29

66 0填充整数输出 30

69 格式化指数输出 31

68 用PRINTF格式化浮点数 31

67 在八进制和十六进制数前显示前缀 31

71 联合使用格式符 32

70 左对齐PRINTF的输出 32

74 使用PRINTF的转义字符 33

73 显示NEAR和FAR字符 33

72 字符串的换行 33

76 使用PRINTF的返回值 34

75 判断PRINTF已显示的字符数目 34

79 用ANSI驱动器显示屏幕颜色 35

78 用ANSI驱动器清除屏幕显示 35

77 使用ANSI设备驱动器 35

81 在C中作基本的数学运算 36

80 用ANSI驱动器定位光标 36

82 模运算(取余运算) 37

84 强制操作符运算顺序 38

83 运算符的优先级和结合性 38

85 C的自增运算符 39

86 C的自减运算符 40

88 按位与运算 41

87 按位或运算 41

89 按位异或运算 42

91 对变量的值进行运算 43

90 “取反”运算 43

93 C的长度(SIZEOF)运算符 44

92 C的条件运算符 44

94 移位运算 45

96 条件运算符 46

95 位循环运算 46

100 简单语句和复杂语句 47

99 用if判断条件 47

97 循环控制 47

98 C如何表示真(TRUE)和假(FALSE) 47

101 判断是否相等 48

103 用逻辑与判断两个条件 49

102 关系判断 49

105 逻辑非运算 50

104 用逻辑或来判断两个条件 50

107 在复合语句中定义变量 51

106 将条件结果赋值给变量 51

108 使用缩进来提高程序的可读性 52

111 永远循环下去 53

110 判断浮点数 53

109 使用扩展CTRL+BREAK检查 53

113 IF-IF-ELSE语句 54

112 赋值判断 54

114 按规定次数执行语句 55

115 FOR语句的有些部分是可选择的 56

117 控制FOR循环的增值 57

116 在FOR语句中减值 57

119 空循环 58

118 在FOR循环中使用字符型和浮点型数值 58

121 在FOR循环中使用逗号运算符 59

120 无穷循环 59

123 用WHILE循环重复执行一条或多条语句 60

122 不要在FOR循环中改变控制变量的值 60

124 WHILE循环的组成部分 61

125 使用DO重复执行一条或多条语句 62

126 C的CONTINUE语句 63

127 使用C的BREAK语句来结束循环 64

129 判断多个条件 65

128 GOTO语句分支 65

130 在SWITCH中使用BREAK 66

131 使用SWITCH语句的DEFAULT CASE 67

133 宏与常量扩展 69

132 在程序中定义常量 69

第二章 宏与常量 69

136 使用_LINE_预处理器常量 70

135 使用_FILE_预处理器常量 70

134 给常量和宏命名 70

137 改变预处理器的行计数 71

141 判断是否进行ANSIC编译 72

140 记录预处理器的日期和时间 72

138 生成无条件预处理器错误 72

139 其他预处理器常量 72

144 比较宏与函数 73

143 取消宏或常量 73

142 判断是C++还是C 73

148 使用#INCLUDE<FILENAME.H>或#INCLUDE“FILENAME.H” 74

147 创建用户自己的头文件 74

145 编译器PRAGMAS 74

146 预定义值和宏 74

150 进行IF-ELSE预处理 75

149 判断符号是否被定义 75

152 实现IF-ELSE和ELSE-IF预处理 76

151 更强大的预处理器条件判断 76

154 创建自定义宏 77

153 定义需要多行的宏和常量 77

157 创建SQUARE和CUBE宏 78

156 创建MIN和MAX宏 78

155 在宏定义中不要放置分号 78

159 如何使用括号 79

158 注意宏定义中的空格 79

160 宏是没有类型的 80

163 C是如何存储字符串的 81

162 编译器是如何表示字符串的 81

第三章 字符串 81

161 C字符串的形象化 81

165 在字符串常量内表示引号 82

164 ‘A’是如何区别于“ A”的 82

167 使用STRLEN函数 83

166 判断字符串的长度 83

168 将一个字符串的字符复制到另一个字符串中 84

170 给字符串追加N个字符 85

169 将一个串的内容追加到另一个串上 85

172 不要越过字符串的界限 86

171 把一个字符串转移到另一个字符串 86

174 比较字符串时忽略大小写 87

173 判断两个字符串是否相同 87

175 将字符串转换成大写或小写 88

177 返回索引到串的首次出现 89

176 获取字符串中第一次出现的某个字符 89

179 返回指向字符串末次出现的索引 90

178 搜索字符在字符串中的末次出现 90

182 计算字符串中字符出现的次数 91

181 为FAR字符串编写字符串函数 91

180 使用FAR字符串 91

184 将某特定字符赋给整个字符串 92

183 将字符串的内容反转 92

186 比较两个字符串的前N个字符 93

185 比较两个字符串 93

187 不考虑大小写比较字符串 94

189 复制字符串的内容 95

188 将字符串转换成数字 95

190 从给定字符序列中查找字符的首次出现 96

192 计算子字符串出现的次数 97

191 在字符串中查找子字符串 97

195 不使用%S格式标识符显示字符串 98

194 获取于字符串的最右端出现 98

193 给子字符串获取索引 98

197 用另一个子字符串代替子字符串 99

196 从字符串中删除子字符串 99

199 判断字符是否为字母数字 100

198 转换数值的ASCII码形式 100

203 判断字符是否为数字 101

202 判断字符是否为控制符 101

200 字符是否为字母 101

201 判断字符是否包含ASCII值 101

208 判断字符是否包含空白(whitespace)符 102

207 判断字符是否为标点符号 102

204 判断字符是否为图形字符 102

205 判断字符是大写还是小写 102

206 判断字符是否可打印 102

210 将字符转换成大写形式 103

209 判断字符是否为十六进制值 103

213 将输出格式写进字符串变量 104

212 使用ASCII字符 104

211 将字符转换成小写形式 104

215 标志字符串以节省空间 105

214 从字符串中读输入 105

216 初始化字符串 106

217 函数 107

第四章 函数 107

219 把MAIN当作函数 108

218 在函数中使用变量 108

221 使用多参数 109

220 参数简介 109

223 函数返回值 110

222 老式C程序中的参数申明 110

224 RETURN语句 111

225 函数原型 112

227 形参和实参 113

226 运行时程序库 113

230 局部变量 114

229 返回类型为非INT型的函数 114

228 解决名称冲突 114

232 函数的开销 115

231 函数如何使用堆栈 115

234 申明全局变量 116

233 C如何存储局部变量 116

236 解决全局和局部变量的名称冲突 117

235 避免使用全局变量 117

238 传值调用 118

237 更好地定义全局变量的有效范围 118

239 使用传值调用防止参数值变化 119

241 获取地址 120

240 传址调用 120

242 使用变量的地址 121

244 只改变指定参数 122

243 改变参数的值 122

246 记住函数变量的值 123

245 使用堆栈进行传址调用 123

247 C是如何初始化静态变量的 124

249 PASCAL关键字的影响 125

248 使用PASCAL调用顺序 125

252 递归函数 126

251 CDECL关键字 126

250 混合编程示例 126

253 递归阶乘函数 127

255 进一步理解递归 128

254 另一个递归的例子 128

257 判断是否要使用递归 129

256 直接递归与间接递归 129

258 为什么递归函数慢 130

261 传递指定的数组元素 131

260 将字符串传递给函数 131

259 如何消除递归 131

263 使用CONST不会阻止参数值的修改 132

262 形式参数中的CONST 132

265 指针的使用与字符串的申明 133

264 无界字符串的申明 133

268 应用外部变量 134

267 外部变量 134

266 C是如何使用堆栈处理字符串参数的 134

269 外部静态变量 135

271 调用结构和基指针 136

270 VOLATILE关键字 136

272 调用汇编语言函数 137

273 从汇编语言函数中返回值 138

277 范围 139

276 AUTO关键字 139

274 没有返回值的函数 139

275 不使用参数的函数 139

280 标识符的可见性 140

279 名称空间和标识符 140

278 范围的分类 140

283 支持个数可变的参数 141

282 支持参数个数可变的函数 141

281 DURATION 141

284 VA_START、VA_ARG和VA_END是如何工作的 142

285 创建支持多参数多类型的函数 143

287 显示字符输出 145

286 从键盘读入字符 145

第五章 键盘操作 145

290 联合使用GETCHAR和PUTCHAR 146

289 将键盘输入赋给字符串 146

288 缓冲输入 146

292 使用直接I/O读入字符 147

291 记住,GETCHAR和PUTCHAR都是宏 147

294 知道何时使用‘\R’和‘\N’ 148

293 不显示字符的直接键盘输入 148

296 将按键放回键盘缓存 149

295 直接输出 149

297 使用CPRINTF快速格式化输出 150

299 写字符串 151

298 快速格式化键盘输入 151

301 从键盘读入字符串 152

300 使用直接I/O实现更快的字符串输出 152

303 以彩色显示输出 153

302 以更快的速度从键盘输入字符串 153

306 删除屏幕上的当前行 154

305 删除当前行到行尾的内容 154

304 清除屏幕显示 154

309 在屏幕上插入空行 155

308 判断行与列的位置 155

307 定位光标进行屏幕输出 155

310 将屏幕上的文本拷贝到缓冲区 156

312 判断文本模式设置 157

311 将缓冲区中的文本拷贝到屏幕的指定位置 157

313 控制屏幕颜色 158

314 指定背景色 159

316 使用TEXTBACKGROUND设置背景色 160

315 使用TEXTCOLOR设置前景色 160

318 决定当前文本模式 161

317 控制文本的明暗度 161

320 定义文本窗口 162

319 在屏幕上移动文本 162

322 使用ARCCOSINE(反余弦) 164

321 使用整型表达式的绝对值 164

第六章 数学 164

325 求复数的绝对值 165

324 使用ARCTANGENT(反正切) 165

323 使用ARCSINE(反正弦) 165

327 使用角的余弦 166

326 对浮点值进位舍入 166

330 使用角的双曲正弦 167

329 使用角的正弦 167

328 使用角的双曲余弦 167

332 使用角的双曲正切 168

331 使用角的正切 168

334 使用指数 169

333 整数相除 169

337 使用浮点值的尾数和指数 170

336 使用浮点余数 170

335 使用浮点型表达式的绝对值 170

338 计算X*2E的结果 171

340 计算log10x的值 172

339 计算自然对数 172

343 计算xn的结果 173

342 把浮点值分解成整数和小数部分 173

341 判断最大值与最小值 173

345 生成随机数 174

344 计算10x的结果 174

347 给随机数生成器赋初值 175

346 将随机值映射到指定范围 175

349 创建定制的数学错误处理程序 176

348 计算数值的平方根 176

352 判断可用的盘空间 178

351 选择当前驱动器 178

第七章 文件、目录和磁盘 178

350 判断当前盘驱动器 178

354 读入文件分配表(FAT)信息 179

353 当心DBLSPACE 179

355 磁盘ID 180

357 进行BIOS磁盘I/O 181

356 绝对扇区读写操作 181

359 应用FOPEN打开文件 183

358 测试软驱是否准备好 183

360 FILE结构 184

362 每次读/写文件信息的一个字符 185

361 关闭一个打开的文件 185

364 判断当前文件位置 186

363 文件指针的位置指针 186

367 CONFIG.SYS文件的FILES=条目 187

366 文件翻译 187

365 文件流 187

370 进程文件表(PROCESS FILE TABLE) 188

369 文件句柄(FILE HANDLES) 188

368 使用低级和高级文件I/O 188

371 进程文件表入口 189

372 系统文件表 190

373 显示系统文件表 191

374 从流指针中导出文件句柄 192

376 重命名文件 193

375 进行格式化文件输出 193

377 删除文件 194

378 判断程序如何访问文件 195

380 深入掌握文件属性 196

379 设置文件的访问模式 196

381 检测文件流错误 198

383 刷新I/O流 199

382 判断文件的长度 199

385 获取文件流的文件句柄 200

384 一次关闭所有被打开的文件 200

387 使用TMP或TEMP创建临时文件名 201

386 使用P_TMPDIR创建临时文件名 201

390 为文件搜索命令路径 202

389 删除临时文件 202

388 创建真正的临时文件 202

391 为文件搜索环境入口的子目录 203

393 最小化文件I/O操作 204

392 打开TEMP目录中的文件 204

395 改变当前目录 205

394 在目录名中使用反斜杠 205

398 删除目录树 206

397 删除目录 206

396 创建目录 206

399 建立完全路径名 208

400 分解目录路径 209

402 使用低级函数打开和关闭文件 210

401 建立路径名 210

403 创建文件 211

405 判断文件是否结束 212

404 进行低级读写操作 212

407 为文件句柄翻译指定模式 213

406 应用低级文件例行程序 213

409 打开多于20个的文件 214

408 利用LSEEK定位文件指针 214

411 获取文件的日期和时间标记 215

410 使用DOS文件服务 215

412 利用位域获取文件的日期与时间 217

413 设置文件的日期与时间标记 218

415 每次读写一个字 219

414 把文件日期和时间设置成当前日期和时间 219

416 改变文件的长度 220

417 控制文件打开操作的读写模式 221

418 将缓冲区赋给文件 222

419 分配文件缓冲区 223

421 读写结构 224

420 利用MKTEMP创建唯一文件名 224

422 从文件流中读取结构数据 225

423 复制文件句柄 226

424 强制文件句柄设置 227

427 打开文件进行共享访问 228

426 文件共享 228

425 把文件句柄和文件流联系起来 228

428 锁定文件内容 229

429 获取更精细的文件锁定控制 231

431 打开目录 232

430 使用DOS目录 232

435 递归读取磁盘文件 233

434 反绕目录 233

432 读取目录入口 233

433 利用目录服务读C:\WINDOWS 233

436 判断当前文件位置 234

437 打开共享文件流 235

439 创建新文件 236

438 在指定目录中创建唯一文件 236

440 利用DOS服务访问文件 237

443 按行写文本 239

442 按行读文本 239

441 强制二进制或文本文件打开 239

446 为什么TEXTCOPY不能拷贝二进制文件 240

445 强制二进制文件翻译 240

444 应用FGETS和FPUTS 240

449 读取格式化的文件数据 241

448 舍弃字符 241

447 判断文件结尾 241

450 根据当前位置定位文件指针 242

452 重新打开文件流 243

451 获取文件句柄信息 243

455 形象表示数组 245

454 申明数组 245

第八章 数组、指针和结构 245

453 数组 245

456 数组的内存需求 246

458 访问数组元素 247

457 初始化数组 247

460 使用常量定义数组 248

459 通过循环访问数组元素 248

462 把数组看作函数 249

461 把一个数组传送给函数 249

465 判断数组能存放多少个元素 250

464 在堆栈中传送数组 250

463 区分字符串数组 250

467 权衡数组与动态存储的利弊 251

466 为大数组使用HUGE内存模式 251

469 行与列 252

468 多维数组 252

471 给二维数组元素赋初值 253

470 访问二维数组中的元素 253

473 通过循环显示二维数组 254

472 判断多维数组占用的内存 254

475 初始化多维数组 255

474 遍历三维数组 255

476 把二维数组传送给函数 256

478 C是如何存放多维数组的 257

477 把多维数组当作一维数组 257

480 以数组为成员的结构数组 258

479 按行存放与按列存放 258

481 联合 259

482 使用联合节省内存 260

484 应用REGS联合 261

483 使用REGS——一种典型的联合 261

485 位字段结构 262

487 位字段结构的取值范围 263

486 形象表示位字段结构 263

489 对分查找 264

488 在数组中查找指定的值 264

492 冒泡排序法 265

491 对数组进行排序 265

490 应用对分查找法 265

493 应用冒泡排序法 266

495 应用选择排序法 267

494 选择排序法 267

496 SHELL(希尔)排序法 268

498 快速排序法 269

497 应用SHELL排序法 269

499 应用快速排序法 270

501 对字符串数组排序 271

500 上述排序方法的遗留问题 271

502 利用LFIND搜索字符串 272

504 利用BSEARCH搜索已排序数组 273

503 利用LSEARCH搜索数值 273

505 利用QSORT对数组排序 274

506 判断数组元素的个数 275

509 C是如何把数组当成指针的 276

508 判断变量的地址 276

507 把指针理解为地址 276

511 申明指针变量 277

510 对数组应用取地址运算符(&) 277

513 使用指针值 278

512 间接访问指针 278

516 指针的增值与减值 279

515 指针运算 279

514 指针与函数参数的使用 279

518 利用指针遍历数组 280

517 联合应用指针引用与增值 280

521 指针数组 281

520 创建返回值为指针的函数 281

519 使用返回值为指针的函数 281

523 遍历字符串数组 282

522 形象表示字符串数组 282

525 使用指向一个指向字符串的指针的指针 283

524 把字符串数组当成指针 283

529 使用指向函数的指针 284

528 创建指向函数的指针 284

526 利用指针申明字符串常量 284

527 VOID类型指针 284

530 使用三级指针 285

533 结构标记是结构的名称 286

532 结构是变量申明的模板 286

531 结构 286

535 结构成员 287

534 用不同的方式申明结构 287

537 应用结构 288

536 形象表示结构 288

539 在函数内部改变结构 289

538 把结构传递给函数 289

541 使用POINTER→MEMBER格式 290

540 (*POINT).MEMBER间接引用 290

543 结构定义的范围 291

542 使用无标记结构 291

546 使用嵌套结构 292

545 进行结构I/O 292

544 初始化结构 292

548 创建结构数组 293

547 包含数组的结构 293

550 BIOS服务 295

549 DOS系统服务 295

第九章 DOS和BIOS服务 295

551 寄存器 296

552 标志寄存器 297

554 利用BIOS访问指针 298

553 软件中断 298

556 可能的DOS副作用 300

555 CONTROL+BREAK信息 300

558 控制声音 301

557 暂时挂起程序 301

559 获取国家专用的信息 302

561 访问和控制磁盘传输区 303

560 磁盘传输地址 303

562 BIOS键盘服务 304

563 获取BIOS设备列表 306

564 控制串行口I/O 307

566 获取扩展DOS错误信息 309

565 利用BDOS访问DOS服务 309

567 判断BIOS常规内存数量 310

569 把远端地址分解为段地址和偏移地址 311

568 创建远指针(FAR PRINTER) 311

571 读段寄存器设置 312

570 判断自由核心内存 312

574 常规内存的分布 314

573 常规内存 314

第十章 内存管理 314

572 内存的类型 314

576 为什么PC和DOS限制于1MB 315

575 访问常规内存 315

578 扩充内存 316

577 从段和偏移量中产生地址 316

579 使用扩充内存 317

581 实模式和保护模式 318

580 扩展内存 318

583 高端内存区 319

582 访问扩展内存 319

585 各种堆栈配置 320

584 堆栈 320

588 给内存区域赋值 321

587 使用_STKLEN控制堆栈空间 321

586 判断程序的当前堆栈大小 321

590 拷贝内存区域直到某指定字节 322

589 拷贝内存区域 322

592 交换两个相邻字符串字节 323

591 比较两个无符号字符数组 323

593 分配动态内存 324

595 不再需要时释放内存 325

594 再谈类型转换 325

597 堆 326

596 利用CALLOC函数分配内存 326

598 解决64Kb堆限制 327

599 从堆栈中分配内存 328

600 分配巨型数据 329

602 BRK函数 330

601 改变被分配内存区域的大小 330

604 快速堆检测 331

603 检测堆 331

605 填充自由堆空间 332

606 检测特定的堆入口 333

608 访问指定内存单元 334

607 遍历堆入口 334

609 向内存中置数 335

611 访问端口值 336

610 PC端口 336

612 CMOS 337

614 微型内存模式 338

613 内存模式 338

616 中型内存模式 339

615 小型内存模式 339

618 大型内存模式 340

617 压缩内存模式 340

619 巨型内存模式 341

620 判断当前的内存模式 342

622 将日期和时间从秒的形式转换成ASCII码 343

621 获取当前日期与时间 343

第十一章 日期和时间 343

625 判断程序的耗时 344

624 延迟若干毫秒 344

623 DAYLIGHT SAVINGS ADJUSTMENT 344

627 获取数据串 345

626 比较两个时间 345

629 读BIOS计时器 346

628 获取时间串 346

630 使用当地时间 347

632 获取DOS系统时间 348

631 使用格林威治平时 348

633 获取系统日期 349

635 设置DOS系统日期 350

634 设置DOS系统时间 350

637 利用TIMEZONE计算时差 351

636 把DOS日期转换为UNIX格式 351

640 利用TZ环境入口 352

639 利用TZSET设置时区区域 352

638 判断当前时区 352

642 获取时区信息 353

641 从用户程序中设置TZ环境入口 353

644 把日期转换成自1/1/1970以来的秒数 354

643 以秒钟的形式设置自1/1/1970午夜以来的系统时间 354

646 创建格式化日期和时间串 355

645 判断日期的儒略历日期 355

647 PC时钟类型 357

649 提醒用户输入密码 358

648 等候按键 358

第十二章 重定向I/O和进程命令行 358

650 自己编写密码函数 359

654 利用STDOUT和STDIN 360

653 联合使用INPUT和OUTPUT重定向 360

651 输出重定向 360

652 输入重定向 360

656 GETCHAR和PUTCHAR 361

655 管道(pipe)运算符 361

658 确保信息出现在屏幕上 362

657 对重定向输入进行编号 362

659 自定义MORE命令 363

662 创建定时的MORE命令 364

661 显示重定向字符的个数 364

660 显示重定向行的数目 364

663 防止I/O重定向 365

665 把重定向输出分割到一个文件中 366

664 应用STDPRN文件句柄 366

667 在重定向输入内寻找子串的出现 367

666 应用STDAUX文件句柄 367

668 显示重定向输入的头N行 368

670 显示命令行变元的个数 369

669 命令行变元 369

672 使用引号内的命令行变元 370

671 显示命令行 370

674 把ARGV当作指针 371

673 从命令行中显示文件内容 371

676 环境 372

675 C是如何知道命令行的 372

679 使用命令行数字 373

678 对MAIN的参数使用VOID 373

677 把ENV当作一个指针 373

680 出口状态值 374

682 判断是否把MAIN申明为VOID 375

681 为出口状态过程使用RETURN 375

684 DOS是如何对待环境的 376

683 在环境中搜索特定入口 376

686 给当前环境添加入口 377

685 应用ENVIRON全局变量 377

687 给DOS环境添加元素 378

689 定义在程序结束时执行的函数 379

688 退出当前程序 379

691 重复使用目标代码 381

690 库 381

第十三章 编程工具 381

694 常用的库操作 382

693 创建库文件 382

692 编译C和OBJ文件时出现的问题 382

698 连接器 383

697 库管理程序的其他功能 383

695 列出库文件中的子例行程序 383

696 利用库减少编译时间 383

701 使用连接器响应文件 384

700 使用连接映像 384

699 连接器的功能 384

703 生成一个简单的MAKE文件 385

702 使用MAKE命令简化应用程序的创建 385

706 MAKE和命令行 386

705 说明用户的MAKE文件 386

704 通过MAKE使用多依赖性文件 386

708 显现的和隐含的MAKE法则 387

707 在MAKE文件中放置多个依赖性 387

710 预定义MAKE宏 388

709 使用MAKE宏 388

712 验证一个MAKE宏 389

711 用MAKE执行条件进程 389

716 关闭命令显示 390

715 因错误结束MAKE文件 390

713 再次包含一个MAKE文件 390

714 使用MAKE的宏修饰符 390

720 为多个依赖文件执行一个MAKE命令 391

719 同时激活和改变一个宏 391

717 使用文件BUILTINS.MAK 391

718 在MAKE中执行出口状态进程 391

722 理解CTYPE.H,ISTYPE宏 393

721 判断是否有数学协处理器 393

第十四章 高级C语言编程 393

724 检查系统和路径错误 394

723 控制直接的视像 394

726 决定操作系统版本号 395

725 显示预定义的错误信息 395

728 执行一个非本地的GOTO 396

727 理解可移植性 396

730 激活一个内部的DOS命令 397

729 获得进程ID(PID) 397

731 使用-PSP全局变量 398

734 放置一个枚举类型来使用 399

733 使用枚举类型 399

732 在变量申明中使用CONST修饰符 399

737 保存和恢复寄存器 400

736 分配一个特殊的值给枚举类型 400

735 理解一个枚举值 400

740 建立一个链接的列表 401

739 申明一个链接的列表结构 401

738 动态列表简介 401

742 理解链表转移 402

741 一个简单的链表例子 402

744 增加一个列表入口 403

743 创建一个更有用的列表 403

746 显示一个存储的目录 404

745 插入一个列表入口 404

747 从一个列表中删除一个元素 405

748 使用一个双向链表 406

750 理解NODE->PREVIOUS->NEXT 407

749 创建一个简单的双向链表 407

751 从一个双向链表中移走一个元素 408

752 在一个双向链表中插入一个元素 409

754 派生一个子进程 410

753 理解子进程 410

755 使用其他的SPAWNLXX函数 411

756 使用SPAWNVXX函数 412

757 执行一个子进程 413

758 使用其他的EXECLXX函数 414

760 理解覆盖 415

759 使用EXECVXX函数 415

762 PC机的中断 416

761 理解中断 416

764 判断一个中断向量 417

763 使用中断关键字 417

767 生成简单的中断处理器 418

766 使能与禁止中断 418

765 设置一个中断向量 418

768 链接一个二次中断 419

770 捕获PC机时钟 420

769 生成一个中断 420

771 理解致命错误 421

773 一个更完全的致命错误处理器 422

772 C语言中的致命错误处理 422

775 生成一个Ctrl+Break处理器 424

774 恢复改变过的中断 424

778 直接插入内部函数 425

777 使用指令集选择改善性能 425

776 在用户的致命错误处理器中使用DOS服务 425

780 理解快速函数调用 426

779 使能和禁止内在函数 426

784 理解代码紧缩 427

783 理解冗余载入禁止 427

781 _FASTCALL参数传递的法则 427

782 理解不变代码 427

786 理解循环引入和强度削减 428

785 理解循环紧缩 428

790 基本类型与派生类型 429

789 理解C语言的4个基本类型 429

787 消除普通的子表达式 429

788 标准C语言转换 429

792 理解连接 430

791 理解初始化值 430

795 理解左值(LVALUE) 431

794 申明和定义 431

793 理解临时申明 431

798 谨慎使用远指针 432

797 使用段寄存器关键字 432

796 理解右值(RVALUE) 432

800 数学协处理器语句 433

799 理解正常化的指针 433

802 防止循环包含 434

801 理解变量中的CDECL和PASCAL 434

806 理解COUT I/O流 435

805 从简单的C++程序开始 435

第十五章 C++入门 435

803 C++介绍 435

804 C++源文件的差异 435

808 用COUT连接不同的数据类型 436

807 使用COUT输出值和变量 436

812 输出到CERR 437

811 如果钟情PRINTF,使用PRINTF 437

809 显示十六进制和八进制数值 437

810 重定向COUT 437

815 理解CIN如何选择数据域 438

814 CIN不要使用指针 438

813 用CIN得到输入 438

820 理解IOSTREAM.H头文件包含的内容 439

819 使用FLUSH操纵符快速输出 439

816 理解输入输出流如何获得变量类型 439

817 使用CLOG实现输出 439

818 CIN、COUT、CERR和CLOG是类的实例 439

823 C++支持匿名联合 440

822 C++增加的新关键字 440

821 C++需要函数原型 440

826 控制COUT的输出宽度 441

825 提供缺省参数值 441

824 分辨全局范围 441

828 指定COUT的填充字符 442

827 使用SETW设置COUT宽度 442

829 左对齐和右对齐COUT的输出 443

831 以小数或科学记数格式显示数值 444

830 控制COUT显示浮点数字的数目 444

833 设置输入输出基数 445

832 恢复COUT至默认值 445

836 使用按位运算符及COUT 446

835 在函数原型中放置默认参数值 446

834 在需要的地方定义变量 446

840 理解自由空间 447

839 在C++中使用ENUM关键字 447

837 理解迟缓(或短路)计算 447

838 在C++中使用CONST关键字 447

843 无自由空间的测试 448

842 为多个数组分配内存 448

841 用NEW分配内存 448

846 释放内存至自由空间 449

845 使用FAR指针和NEW运算符 449

844 关于堆空间 449

848 给函数传递引用 450

847 理解C++中的引用 450

851 使用引用的规则 451

850 用三种方法传递参数 451

849 防止隐藏对象 451

853 使用INLINE关键字 452

852 函数可返回引用 452

854 使用C++的ASM关键字 453

858 简单的TEE命令 454

857 简单过滤器程序 454

855 用CIN读字符 454

856 用COUT写字符 454

861 文件结束测试 455

860 更好的FIRST命令 455

859 简单的FIRST命令 455

863 理解连接规范 456

862 用ENDL产生新行 456

866 重载函数的第二个例子 457

865 重载函数 457

864 理解重载 457

867 避免不明确的重载 458

870 改变NEW运算符的缺省处理器 459

869 在循环中使用CIN.GETLINE 459

868 使用CIN每次读一行 459

872 判断C++编译 460

871 用SET_NEW_HANDLER函数设置NEW处理器 460

874 结构中定义函数成员 461

873 理解C++中的结构 461

877 给成员函数传递参数 462

876 在结构外定义成员函数 462

875 在结构内定义成员函数 462

879 不同结构具有同名函数成员 463

878 同一结构的多个变量 463

880 同名成员不同函数 464

883 理解为什么使用对象 465

882 理解面向对象编程 465

第十六章 对象 465

881 理解对象 465

884 把程序分解成对象 466

886 理解C++的类 467

885 理解对象和类 467

889 理解继承 468

888 理解多态性 468

887 理解封装 468

891 创建简单类模型 469

890 类和结构的选择 469

892 实现简单类的程序 470

895 在申明中使用或省略类名 471

894 理解作用域分辨符 471

893 定义类构件 471

898 理解PRIVATE:标志 472

897 理解信息隐藏 472

896 理解PUBLIC:标志 472

900 使用公有和私有数据 473

899 理解PROTECTED:标志 473

902 公有方法常称为接口函数 474

901 决定什么隐藏什么公开 474

903 在类外定义类函数 475

906 对象实例共享代码 476

905 理解对象实例 476

904 在类的内部和外部定义方法 476

907 存取类成员 477

910 另一种类初始化方法 478

909 类初始化 478

908 全局分辨符 478

912 静态数据成员 479

911 理解静态类成员 479

913 静态成员函数 480

915 内联函数申明 481

914 成员函数申明 481

917 类和联合 482

916 决定内联和非内联函数的使用 482

919 友元函数 483

918 匿名联合 483

920 友元类 484

922 使用含参数的构造函数 485

921 构造函数 485

第十七章 常见的类函数 485

923 使用构造函数 486

925 使用含参数的构造函数 487

924 程序何时执行构造函数 487

927 用构造函数分配内存 488

926 在构造函数中解决名字冲突 488

928 方便简洁地处理内存分配 489

930 重载构造函数 490

929 构造函数的缺省参数 490

931 获得重载函数的地址 491

933 析构函数 492

932 使用含单个参数的构造函数 492

935 为何使用析构函数 493

934 使用析构函数 493

936 程序何时调用析构函数 494

937 使用复制构造函数 495

938 显式构造函数 496

941 局部类 497

940 嵌套类 497

939 类作用域 497

943 创建类变量数组 498

942 成员名和参数名冲突的解决 498

946 创建运算符成员函数 499

945 运算符重载 499

944 构造函数和类数组 499

947 重载加运算符 500

948 重载减运算符 501

949 重载前置和后置增量运算符 502

950 重载前置和后置减量运算符 503

952 用友元函数重载运算符 504

951 重温运算符重载限制 504

954 用友元函数重载++或--运算符 505

953 友元函数重载运算符的限制 505

955 用友元函数重载运算符的原因 506

957 重载DELETE运算符 508

956 重载NEW运算符 508

958 为数组重载NEW或DELETE 509

959 重载数组下标运算符[] 511

960 重载函数调用运算符() 513

962 重载逗号运算符 514

961 重载指针运算符-> 514

963 抽象 515

964 为类指针分配内存 516

965 释放类指针 517

966 取消输入前的空格 518

969 类成员函数使用INLINE关键字 519

968 在头文件中定义类 519

967 类库 519

971 类数组的释放 520

970 类数组初始化 520

972 创建初始化的类数组 522

973 用多参数的构造函数初始化数组 523

974 创建初始化和未初始化数组 524

975 使用类数组 525

977 内联类代码允许改变 526

976 数组如何使用内存 526

978 静态存储区 527

982 C++的输入流 528

981 C++的输出流 528

第十八章 用C++输入输出 528

979 I/O流操作和STDIO同步 528

980 C++的I/O流 528

984 设置格式标志 529

983 用IOS成员格式化输入和输出 529

987 检测当前格式标志 530

986 重载SETF函数 530

985 清除格式标志 530

989 使用PRECISION函数 532

988 设置所有标志 532

992 用操纵算子格式化I/O 533

991 理解操纵算子 533

990 使用FILL函数 533

994 创建自己的插入函数 534

993 比较操纵算子和成员函数 534

995 重载抽取运算符 535

998 抽取函数演示 536

997 创建自己的抽取函数 536

996 重载COUT的插入运算符的另一种方法 536

1000 创建无参数的操纵算子 537

999 创建自己的操纵算子函数 537

1003 打开文件流 538

1002 老式流类库 538

1001 使用有参数的操纵算子 538

1005 读和写文件流数据 539

1004 关闭文件流 539

1007 把文件流操作放到一起 540

1006 检查文件操作的状态 540

1009 流缓冲类 541

1008 执行二进制拷贝操作 541

1011 用READ读二进制数据 542

1010 简单的流缓冲例子 542

1012 用WRITE写二进制数据 543

1013 使用GCOUNT成员函数 544

1015 使用GETLINE方法 545

1014 使用重载的GET函数 545

1016 文件结束的检测 546

1017 使用IGNORE函数 547

1020 获得文件流的当前位置 548

1019 使用PUTBACK函数 548

1018 使用PEEK函数 548

1022 用SEEKG和SEEKP实现随机访问 549

1021 控制文件流指针 549

1024 判断I/O流的当前状态 550

1023 在文件内操纵文件指针位置 550

1026 字符串流 551

1025 数组I/O类 551

1028 更好理解OSTRSTREAM 552

1027 用ISTRSTREAM写字符串 552

1030 对输出数组使用PCOUNT 553

1029 使用重载ISTRSTREAM形式 553

1032 使用STRSTREAM 554

1031 用IOS成员函数操纵流数组 554

1033 随机访问流数组 555

1035 为字符串数组定制插入运算符 556

1034 对流数组使用操纵符 556

1036 为流数组定制抽取运算符 558

1037 I/O流中使用动态数组 559

1039 ENDS操纵符 560

1038 流数组格式化 560

1041 为编译器表明类 561

1040 对象调用另一对象 561

1043 申明READER类为友元 562

1042 重温友元 562

1045 消除CLASS类名语句 563

1044 另一个友元类演示程序 563

1047 名字冲突及友元 564

1046 限制友元访问 564

1048 C++中的继承 566

第十九章 继承及多态性 566

1051 基类及派生类的构造函数 567

1050 派生类 567

1049 基类和派生类 567

1052 使用受保护的成员 568

1054 公有的和私有的基类继承 569

1053 何时使用受保护成员 569

1055 受保护的基类继承 570

1057 简单的多重继承 571

1056 多重继承 571

1058 构造函数的顺序和基类 572

1059 申明私有基类 573

1060 析构函数和多重继承 574

1061 基类和派生类间的名字冲突 575

1063 继承类何时执行构造函数 576

1062 解决类及其基类名字的冲突 576

1064 派生类构造函数演示 577

1065 如何为基类构造函数传递参数 578

1066 派生类内的访问申明 579

1068 用虚拟基类避免混淆 580

1067 使用派生类的访问申明 580

1070 互为友元 582

1069 虚拟基类 582

1071 派生类如何成为基类 583

1072 派生类使用保护成员 584

1073 定义静态类数据 585

1075 直接访问静态数据成员 587

1074 初始化静态数据成员 587

1077 静态成员函数 588

1076 静态私有数据成员 588

1079 类成员使用增强类型数据 589

1078 公有静态函数的直接访问 589

1080 嵌套类 590

1082 在方法函数中插入汇编语句 591

1081 子类和超类 591

1084 THIS指针 592

1083 类成员可递归 592

1085 THIS指针与其他指针的不同 593

1088 对不同的类使用相同的指针 594

1087 指向类的指针 594

1086 先期和迟后联编 594

1090 虚拟函数 595

1089 使用指针时基类和派生类名字的冲突 595

1091 继承虚拟属性 596

1092 虚拟函数是分层的 597

1093 实现多态性 598

1094 纯虚函数 599

1096 使用虚拟函数 600

1095 抽象类 600

1099 先期和迟后联编演示 601

1098 先期联编和迟后联编间的判定 601

1097 深入先期和迟后联编 601

1100 定义输出流操纵符 602

1102 对类使用SIZEOF 603

1101 查看IOSTREAM.H的时机己成熟 603

1104 类转换 604

1103 PRIVATE、PUBLIC、PROTECTED也能用于结构 604

1105 在构造函数中转换数据 605

1106 一个类赋给另一个类 606

1108 判断运算符提高还是降低可读性 607

1107 友元转换函数 607

1110 使用简单模板 609

1109 模板 609

第二十章 通用函数及模板 609

1112 支持多种类型的模板 610

1111 更好地理解通用函数 610

1114 显式重载通用函数 611

1113 多种通用类型模板的更多知识 611

1115 通用函数的限制 612

1116 使用通用函数 613

1117 通用冒泡排序函数 614

1118 用通用函数压缩数组 615

1120 模板同样消除类复制 616

1119 何处放置模板 616

1122 使用通用类 617

1121 通用类 617

1123 创建含两个通用数据类型的通用类 619

1125 通用数组类 620

1124 创建含参数的操纵符 620

1128 简单的异常处理器 623

1127 基本的异常处理形式 623

第二十一章 异常处理及类型转换 623

1126 异常处理 623

1130 异常具有特定类型 624

1129 THROW语句 624

1132 函数内的局部TRY块 625

1131 TRY块内的函数抛出异常 625

1133 程序何时执行CATCH 626

1134 对单个TRY块使用多个CATCH语句 627

1136 捕获单个TRY块的所有异常 628

1135 对异常使用省略符(…) 628

1137 捕获单个TRY块的显式和通用异常 629

1138 异常的限制 630

1139 重新抛出异常 631

1140 异常处理的应用 632

1142 用缺省函数参数避免错误 633

1141 使用缺省的函数参数 633

1144 创建转换函数 634

1143 缺省参数和函数重载 634

1145 使用转换函数提高类型的可移植性 635

1147 C++中新的强制转换运算符 636

1146 转换函数和重载函数 636

1148 CONST_CAST运算符 637

1149 DYNAMIC_CAST运算符 638

1151 STATIC_CAST运算符 639

1150 REINTERPRET_CAST运算符 639

1153 使用名字空间 640

1152 名字空间 640

1156 为运行时类型标识使用TYPEID 641

1155 运行时类型标识 641

1154 对名字空间用Using语句 641

1157 TYPE_INFO类 642

1159 在类内使用MUTABLE关键字 644

1158 MUTABLE关键字 644

1162 使用布尔数据类型 645

1161 布尔数据类型介绍 645

1160 思考MUTABLE关键字 645

1164 定义字符串类型的特性 647

1163 创建字符串类型 647

第二十二章 创建可重用的类 647

1165 创建STRINGS类 648

1167 STRINGS类执行I/O操作 649

1166 编写STRINGS类的构造函数 649

1168 编写STRINGS类的赋值函数 650

1169 重载+运算符以连接字符串对象 651

1170 从STRINGS对象中移走字符串 652

1171 重载关系运算符 653

1173 把STRINGS对象转换成字符数组 654

1172 判断STRINGS对象的大小 654

1175 演示STRINGS对象 655

1174 把STRINGS对象用作字符数组 655

1177 另一个STRINGS示例 656

1176 为STRINGS类创建头文件 656

1178 用C++的类创建双向链表 657

1179 双向链表类成员 658

1181 运算符重载函数 659

1180 GETNEXT和GETPREVIOUS函数 659

1183 LINKED_LIST类 660

1182 继承LIST_OBJECT类 660

1185 LINK_LIST的REMOVE函数 661

1184 LINKED_LIST的STORE函数 661

1187 以前向的顺序显示LINKED_LIST 662

1186 GETSIART和GETEND函数 662

1189 查找链表 663

1188 以反向顺序显示LINKED_LIST 663

1190 实现LINKED_LIST的简单程序 664

1192 通用LIST_OBJECT类成员 666

1191 创建通用的双向链表类 666

1193 通用LINKED_LIST类 667

1196 通用类用于结构 668

1195 通用类用于DOUBLE链表 668

1194 通用类用作字符链表 668

1197 重载==比较运算符 669

1199 对象用于STORE函数 670

1198 通用链表的其他实现 670

1200 编写判断链表长度的函数 671

1201 标准模板库介绍 672

第二十三章 标准模板库 672

1203 容器 673

1202 标准模板库头文件 673

1204 使用容器的例子 674

1206 前向和可逆容器 676

1205 标准模板库的容器介绍 676

1207 标准模板库的序列容器 677

1209 标准模板库的关联容器 678

1208 理解USING NAMESPACE STD语句 678

1210 迭代器 680

1211 迭代器演示 681

1212 更好地理解STL的输入和输出迭代器 682

1213 STL的其他送代器 683

1215 理解模式 684

1214 理解定则 684

1217 STL算法的另一个演示 685

1216 算法 685

1218 STL包含的算法描述 686

1219 STL的FOR_EACH算法 687

1220 STL的GENERATE_N算法 688

1221 STL的RANDOM_SHUFFLE算法 689

1222 PARTIAL_SORT_COPY算法 691

1223 MERGE算法 693

1224 INNER_PRODUCT算法 694

1225 向量 696

1226 另一个简单向量程序 698

1228 BIT_VECTOR序列容器 699

1227 向量和C数组的比较 699

1229 简单BVECTOR演示 700

1231 LIST容器的通用构件 701

1230 LIST类型 701

1232 构造LIST对象 702

1234 使用ASSIGN成员函数 703

1233 往链表中插入对象 703

1236 遍历LIST对象 704

1235 REMOVE和EMPTY成员函数 704

1238 往SLIST序列容器中插入元素 705

1237 SLIST类型 705

1240 使用DEQUE容器 706

1239 DEQUE容器 706

1241 ERASE和CLEAR成员函数 707

1242 对DEQUE使用[]数组运算符 708

1243 对DEQUE用REVERSE迭代器 709

1246 简单的MAP示例 710

1245 MAP对象 710

1244 管理DEQUE的大小 710

1247 用成员函数管理MAP 711

1249 理解SET(集合) 713

1248 控制MAP的大小及内容 713

1250 简单的SET演示 715

1252 WINDOWS程序和DOS程序之间的不同点 717

1251 WIN32编程介绍 717

第二十四章 Windows编程入门 717

1253 线程介绍 718

1254 理解消息 719

1255 窗口的构件 720

1256 父窗口和子窗口 721

1257 创建一般的WINDOWS程序 723

1258 资源文件 725

1260 定义WINDOWS的句柄类型 727

1259 WINDOWS句柄 727

1262 回调函数 728

1261 GENERIC的头文件 728

1264 更精细地查看GENERIC.CPP程序 729

1263 WINDOWS应用程序编程接口 729

1265 WINMAIN函数 730

1266 窗口的创建 731

1268 SHOWWINDOW函数 732

1267 CREATEWINDOW函数 732

1269 REGISTERCLASS函数 733

1270 学习更多有关消息的知识 735

1271 用TRANSLATEMESSAGE处理消息 736

1274 LPCTSTR类型 737

1273 简单WINDOWS程序的组成 737

1272 用DISPATCHMESSAGE处理消息 737

1275 DWORD类型 738

1276 WINDOWS预定义的类 739

1277 用预定义的类创建简单的窗口 740

1279 窗口及控件的格式 741

1278 创建窗口时WINDOWS发送WM_CREATE消息 741

1280 用扩展的格式创建窗口 744

1282 REGISTERCLASSEX API函数 746

1281 销毁窗口 746

1283 用SETPROP为窗口附加信息 747

1284 用ENUMPROPS列出窗口的属性 748

1285 回调函数 749

1286 MESSAGEBOX函数 750

1287 MESSAGEBEEP函数 751

1289 消息的流动 752

1288 重温消息 752

第二十五章 消息及菜单 752

1291 PEEKMESSAGE函数 754

1290 MSG结构的构件 754

1292 POSTMESSAGE函数 755

1293 SENDMESSAGE函数 756

1296 SETWINDOWSHOOKEX函数 757

1295 钩子消息 757

1294 REPLYMESSAGE函数 757

1297 EXITWINDOWSEX函数 759

1299 菜单的结构 760

1298 菜单的类型 760

1301 POPUP和MENUITEM描述符 761

1300 在资源文件中创建菜单 761

1303 在应用程序中改变菜单 762

1302 为应用程序的窗口增加菜单 762

1305 LOADMENU函数 763

1304 菜单产生的消息 763

1306 MODIFYMENU函数 764

1307 用ENABLEMENUITEM控制菜单 766

1308 用APPENDMENU扩充菜单 767

1309 用DELETEMENU删除指定的菜单 768

1310 在菜单项中使用加速键 769

1311 简单的加速表 770

1312 更好地理解资源文件的结构 771

1313 字符串表 772

1315 用LOADSTRING把字符串表装入程序 773

1314 定制的资源 773

1316 列出资源文件的内容 774

1317 对资源文件用ENUMRESOURCETYPES 776

1318 用FINDRESOURCE把资源装入程序 777

1320 定义对话框类型 779

1319 对话框 779

第二十六章 对话框 779

1322 对话框模板的构件 780

1321 对话框使用键盘 780

1324 对话框定义的构件 781

1323 创建特定的对话框模板 781

1326 用DIALOGBOX宏显示对话框 782

1325 定义对话框的控件 782

1327 对话框的消息循环 784

1329 CREATEDIALOG宏 785

1328 深入控件的处理 785

1330 CREATEDIALOGPARAM函数 786

1331 对话框的缺省消息处理程序 787

1332 用DLGDIRLIST函数创建对话列表框 788

1333 响应用户在列表框中的选择 790

1334 关闭对话框 791

1336 响应鼠标事件 792

1335 用户输入 792

1337 WM_MOUSEMOVE消息 793

1338 读取鼠标按键 794

1340 虚键 795

1339 响应键盘事件 795

1342 进一步使用WM_KEYDOWN消息 797

1341 使用虚键 797

1344 交换鼠标按键 799

1343 设置和返回鼠标的双击时间 799

1345 判断用户是否按了一个键 800

1347 理解不同的滚动条类型 801

1346 滚动条介绍 801

1348 SHOWSCROLLBAR函数 802

1350 滚动条消息 803

1349 滚动条的位置及范围 803

1351 获取滚动条的当前设置 804

1352 滚动窗口内容 805

1353 WM_SIZE消息 807

1354 WM_PAINT消息 808

1355 程序必须捕获的其他滚动条消息 809

1356 使滚动条有效和无效 811

1357 使用SCROLLDC函数 812

1359 全局及局部内存 813

1358 WIN32的内存模型 813

第二十七章 WINDOWS的内存管理 813

1360 虚拟内存 814

1361 重温堆 815

1362 从全局堆中分配内存块 816

1363 用GLOBALREALLOC动态改变堆的大小 817

1364 丢弃已分配的内存块 818

1366 GLOBALLOCK和GLOBALHANDLE 819

1365 使用GLOBALFREE函数 819

1367 检查计算机的内存 821

1368 在进程中创建堆 822

1369 用堆函数管理进程指定的内存 823

1370 检查从堆中分配的内存大小 824

1371 分配虚拟内存块 825

1372 理解保护页 827

1373 更好地理解虚拟内存块 828

1374 释放虚拟内存 829

1375 管理虚拟内存页 830

1376 更好地理解进程 831

第二十八章 进程及线程 831

1377 创建进程 832

1378 结束进程 837

1379 产生子进程 838

1381 运行独立的子进程 839

1380 进一步使用子进程 839

1382 更好地理解线程 840

1384 确定何时不创建线程 841

1383 估计对线程的需要 841

1385 创建简单线程的函数 842

1386 查看线程的启动 843

1388 确定线程堆栈的大小 844

1387 操作系统创建线程的步骤 844

1390 处理线程的执行时间 845

1389 获得当前线程或进程的句柄 845

1391 管理多个线程的处理时间 846

1392 更好地理解GETQUEUESTATUS函数 847

1393 处理无句柄的异常 848

1394 结束线程 849

1396 操作系统如何安排线程 850

1395 确定线程或进程的ID 850

1398 理解WINDOWS的优先级类 851

1397 优先级介绍 851

1399 改变进程的优先级类 852

1400 设置线程的相对优先级 853

1401 获取线程的当前优先级 854

1403 线程的暂停及继续 855

1402 获取线程的上下文 855

1405 定义五个主要的同步对象 856

1404 线程同步 856

1406 创建临界区 857

1408 用WAITFORSINGLEOBJECT同步两个线程 858

1407 使用简单的临界区 858

1409 用WAITFRMULTIPLEOBJECTS同步多个线程 860

1410 创建互斥体 861

1411 在简单的程序中使用互斥体 862

1412 使用信号量 863

1413 简单的事件处理程序 865

1416 更好地理解设备描述表 867

1415 使用图形设备接口的原因 867

第二十九章 图形设备接口 867

1414 理解图形设备接口 867

1419 获取窗口的设备描述表 868

1418 理解原点及范围 868

1417 使用私有设备描述表 868

1420 为打印机创建设备描述表 869

1422 理解CREATEDC的危险 873

1421 用CREATECOMPATIBLEDC创建内存设备描述表 873

1423 使用CREATEFONT函数 874

1424 使用ENUMFONTFAMILIES函数 878

1425 用CREATEFONTINDIRECT显示多个字体 879

1426 获取设备的能力 880

1427 用GETSYSTEMMETRICS函数分析窗口 884

1429 获取整个窗口的设备描述符 887

1428 理解GETSYSTEMMETRICS的使用 887

1430 释放设备描述表 888

1432 理解设备相关的位图 889

1431 由设备描述表获得窗口的句柄 889

第三十章 位图、图元文件及图标 889

1433 理解设备无关位图 890

1434 创建位图 892

1435 显示位图 893

1436 创建DIB位图 895

1437 用某种模式填充矩形 896

1438 使用SETDIBITS 897

1439 用SETDIBITSTODEVICE在指定的设备上输出位图 898

1440 理解图元文件 899

1441 创建并显示图元文件 900

1442 枚举增强型图元文件 901

1443 使用GETWINMETAFILEBITS函数 902

1444 理解图标 903

1445 创建图标 904

1446 从资源中创建图标 905

1447 使用CREATEICONINDIRECT函数 906

1448 使用LOADICON函数 907

1449 用LOADIMAGE装入多种图形类型 908

1451 管道、资源、设备及文件的介绍 911

1450 理解WINDOWS的文件I/O 911

第三十一章 WINDOWS的输入及输出 911

1452 用CREATEFIL函数打开文件 912

1453 CREATEFILE用于不同的设备 916

1455 重温文件指针 918

1454 使用文件句柄 918

1456 用WRITEFILE写文件 919

1457 用READFILE读文件 921

1459 用文件映射共享数据 923

1458 关闭文件 923

1460 把文件映射成虚拟内存 924

1461 把文件的视图映射到当前的进程中 926

1463 理解文件属性 927

1462 打开有名的文件映射对象 927

1464 获取并改变文件的属性 928

1465 获取文件的大小 929

1467 创建目录 930

1466 获取文件的时间标志 930

1468 获取并设置当前的目录 931

1469 获取WINDOWS及系统的目录 932

1471 拷贝文件 933

1470 删除目录 933

1473 删除文件 934

1472 移动及重命名文件 934

1474 用FINDFIRST找出文件 935

1475 使用FINDNEXTFILE 936

1477 用FINDFILE函数根据属性查找文件 937

1476 用FINDCLOSE关闭查找句柄 937

1478 用SEARCHPATH代替FIND查找文件 938

1480 创建临时文件 939

1479 获取临时路径 939

1481 CREATENAMEDPIPE函数 940

1482 连接命名管道 943

1483 调用命名管道 945

1484 断开与命名管道的连接 946

1486 使用异步输入及输出 947

1485 更好地理解异步处理 947

1488 使用设备内核对象的异步I/O 948

1487 OVERLAPPED结构 948

1490 设置较高的或较低的限额 949

1489 工作集大小的限额 949

1491 GETLASTERROR函数 950

1492 用FORMATMESSAGE格式化错误消息 951

1493 使用事件内核对象的异步I/O 953

1495 I/O结束端口介绍 954

1494 WAITFORMULTIPLEOBJECTS用于异步I/O 954

1496 警报I/O用于异步处理 955

1498 READFILEEX及WRITEFILEEX 956

1497 警报I/O仅用于WINDOWS NT 956

1499 使用回调的完成例程 957

1502 .NET环境的其他优势 958

1501 .NET应用程序 958

第三十二章 .NET环境 958

1500 .NET环境 958

1503 Visual Studio 959

1506 中间语言 960

1505 元数据 960

1504 公共语言运行时间 960

1508 .NET通用类型 961

1507 如何使用.NET应用程序 961

1510 元数据不是.NET的新生事物 962

1511 .NET应用程序 963

1514 反射 964

1513 引用和变量类型 964

1515 交互管理数据 965

1517 创建和编译第一个C#程序 966

1518 Console.WriteLine函数 967

1522 使用加号连接字符串 969

1521 字符串中的反斜杠符 969

1523 使用Console.WriteLine显示数值 970

1525 使用占位符格式化输出 971

1524 必须为每个占位符指定值 971

1526 在输出格式中指定精度 972

1527 使用###和000格式化输出 973

1528 C#的Main函数 974

1530 访问命令行变量 975

1529 在Main函数中使用void关键字 975

1531 定义多个Main 976

1532 C#关键字 977

1535 创建引用类型变量 978

1534 创建值类型变量 978

1533 研究C#类型 978

1537 使用未赋值变量作为参数 979

1536 必须给变量赋值 979

1539 定义只读变量 980

1538 C#不支持#define和#include命令 980

1541 通过检查变量来检测溢出错误 981

1540 在C#中创建枚举 981

1542 类型转换 982

1544 C#运算符 983

1543 转换函数 983

1545 C#运算符的优先级 984

1546 在自增和自减运算符之间避免空格 985

1547 不安全的代码 986

1548 C#认为sizeof运算符不安全 987

1550 在C#中判断变量的值 988

1549 在C#中进行判断 988

1552 使用foreach遍历数组元素 989

1551 C#程序中的