C Primer Plus(第6版)中文版

内容简介

《C Primer Plus(第6版)中文版》详细讲解了C语言的基本概念和编程技巧。

《C Primer Plus(第6版)中文版》共17章。第1、2章介绍了C语言编程的预备知识。第3~15章详细讲解了C语言的相关知识,包括数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入输出、结构、位操作等。第16章、17章介绍C预处理器、C库和高级数据表示。本书以完整的程序为例,讲解C语言的知识要点和注意事项。每章末设计了大量复习题和编程练习,帮助读者巩固所学知识和提高实际编程能力。附录给出了各章复习题的参考答案和丰富的参考资料。

《C Primer Plus(第6版)中文版》可作为C语言的教材,适用于需要系统学习C语言的初学者,也适用于巩固C语言知识或希望进一步提高编程技术的程序员。

作者简介

Stephen Prata曾在加利福尼亚的马林学院(肯特菲尔德)教授天文学、物理学和程序设计课程,现已退休。他在加州理工学院获得学士学位,在加州大学伯克利分校获得博士学位。他接触程序设计,是为了利用计算机给星团建模。Stephen撰写和与他人合著了十几本书籍,其中包括C++ Primer Plus和Unix Primer Plus。

目录

第1章 初识C语言 1

  • 1.1 C语言的起源 1
  • 1.2 选择C语言的理由 1
  • 1.2.1 设计特性 1
  • 1.2.2 高效性 1
  • 1.2.3 可移植性 2
  • 1.2.4 强大而灵活 3
  • 1.2.5 面向程序员 3
  • 1.2.6 缺点 3
  • 1.3 C语言的应用范围 3
  • 1.4 计算机能做什么 4
  • 1.5 高级计算机语言和编译器 5
  • 1.6 语言标准 6
  • 1.6.1 第1个ANSI/ISO C标准 6
  • 1.6.2 C99标准 6
  • 1.6.3 C11标准 7
  • 1.7 使用C语言的7个步骤 7
  • 1.7.1 第1步:定义程序的目标 8
  • 1.7.2 第2步:设计程序 8
  • 1.7.3 第3步:编写代码 8
  • 1.7.4 第4步:编译 8
  • 1.7.5 第5步:运行程序 9
  • 1.7.6 第6步:测试和调试程序 9
  • 1.7.7 第7步:维护和修改代码 9
  • 1.7.8 说明 9
  • 1.8 编程机制 10
  • 1.8.1 目标代码文件、可执行文件和库 10
  • 1.8.2 UNIX系统 11
  • 1.8.3 GNU编译器集合和LLVM项目 13
  • 1.8.4 Linux系统 13
  • 1.8.5 PC的命令行编译器 14
  • 1.8.6 集成开发环境(Windows) 14
  • 1.8.7 Windows/Linux 15
  • 1.8.8 Macintosh中的C 15
  • 1.9 本书的组织结构 15
  • 1.10 本书的约定 16
  • 1.10.1 字体 16
  • 1.10.2 程序输出 16
  • 1.10.3 特殊元素 17
  • 1.11 本章小结 17
  • 1.12 复习题 18
  • 1.13 编程练习 18

    第2章 C语言概述 19

  • 2.1 简单的C程序示例 19
  • 2.2 示例解释 20
  • 2.2.1 第1遍:快速概要 21
  • 2.2.2 第2遍:程序细节 21
  • 2.3 简单程序的结构 28
  • 2.4 提高程序可读性的技巧 28
  • 2.5 进一步使用C 29
  • 2.5.1 程序说明 30
  • 2.5.2 多条声明 30
  • 2.5.3 乘法 30
  • 2.5.4 打印多个值 30
  • 2.6 多个函数 30
  • 2.7 调试程序 32
  • 2.7.1 语法错误 32
  • 2.7.2 语义错误 33
  • 2.7.3 程序状态 34
  • 2.8 关键字和保留标识符 34
  • 2.9 关键概念 35
  • 2.10 本章小结 35
  • 2.11 复习题 36
  • 2.12 编程练习 37

    第3章 数据和C 39

  • 3.1 示例程序 39
  • 3.2 变量与常量数据 42
  • 3.3 数据:数据类型关键字 42
  • 3.3.1 整数和浮点数 43
  • 3.3.2 整数 43
  • 3.3.3 浮点数 43
  • 3.4 C语言基本数据类型 44
  • 3.4.1 int类型 44
  • 3.4.2 其他整数类型 47
  • 3.4.3 使用字符:char类型 50
  • 3.4.4 _Bool类型 54
  • 3.4.5 可移植类型:stdint.h和inttypes.h 55
  • 3.4.6 float、double和long double 56
  • 3.4.7 复数和虚数类型 60
  • 3.4.8 其他类型 60
  • 3.4.9 类型大小 62
  • 3.5 使用数据类型 63
  • 3.6 参数和陷阱 63
  • 3.7 转义序列示例 64
  • 3.7.1 程序运行情况 65
  • 3.7.2 刷新输出 65
  • 3.8 关键概念 66
  • 3.9 本章小结 66
  • 3.10 复习题 67
  • 3.11 编程练习 68

    第4章 字符串和格式化输入/输出 71

  • 4.1 前导程序 71
  • 4.2 字符串简介 72
  • 4.2.1 char类型数组和null字符 72
  • 4.2.2 使用字符串 73
  • 4.2.3 strlen()函数 74
  • 4.3 常量和C预处理器 76
  • 4.3.1 const限定符 78
  • 4.3.2 明示常量 78
  • 4.4 printf()和scanf() 80
  • 4.4.1 printf()函数 80
  • 4.4.2 使用printf() 81
  • 4.4.3 printf()的转换说明修饰符 83
  • 4.4.4 转换说明的意义 87
  • 4.4.5 使用scanf() 92
  • 4.4.6 printf()和scanf()的*修饰符 95
  • 4.4.7 printf()的用法提示 97
  • 4.5 关键概念 98
  • 4.6 本章小结 98
  • 4.7 复习题 99
  • 4.8 编程练习 100

    第5章 运算符、表达式和语句 103

  • 5.1 循环简介 103
  • 5.2 基本运算符 105
  • 5.2.1 赋值运算符:= 105
  • 5.2.2 加法运算符:+ 107
  • 5.2.3 减法运算符:- 107
  • 5.2.4 符号运算符:-和+ 107
  • 5.2.5 乘法运算符:* 108
  • 5.2.6 除法运算符:/ 110
  • 5.2.7 运算符优先级 110
  • 5.2.8 优先级和求值顺序 112
  • 5.3 其他运算符 113
  • 5.3.1 sizeof运算符和size_t类型 113
  • 5.3.2 求模运算符:% 114
  • 5.3.3 递增运算符:++ 115
  • 5.3.4 递减运算符:-- 118
  • 5.3.5 优先级 118
  • 5.3.6 不要自作聪明 119
  • 5.4 表达式和语句 120
  • 5.4.1 表达式 120
  • 5.4.2 语句 120
  • 5.4.3 复合语句(块) 123
  • 5.5 类型转换 124
  • 5.6 带参数的函数 127
  • 5.7 示例程序 129
  • 5.8 关键概念 130
  • 5.9 本章小结 130
  • 5.10 复习题 131
  • 5.11 编程练习 134

    第6章 C控制语句:循环 137

  • 6.1 再探while循环 137
  • 6.1.1 程序注释 138
  • 6.1.2 C风格读取循环 139
  • 6.2 while语句 140
  • 6.2.1 终止while循环 140
  • 6.2.2 何时终止循环 141
  • 6.2.3 while:入口条件循环 141
  • 6.2.4 语法要点 141
  • 6.3 用关系运算符和表达式比较大小 143
  • 6.3.1 什么是真 144
  • 6.3.2 其他真值 145
  • 6.3.3 真值的问题 146
  • 6.3.4 新的_Bool类型 147
  • 6.3.5 优先级和关系运算符 148
  • 6.4 不确定循环和计数循环 150
  • 6.5 for循环 151
  • 6.6 其他赋值运算符:+=、-=、*=、/=、%= 155
  • 6.7 逗号运算符 156
  • 6.8 出口条件循环:do while 159
  • 6.9 如何选择循环 161
  • 6.10 嵌套循环 162
  • 6.10.1 程序分析 163
  • 6.10.2 嵌套变式 163
  • 6.11 数组简介 164
  • 6.12 使用函数返回值的循环示例 166
  • 6.12.1 程序分析 168
  • 6.12.2 使用带返回值的函数 169
  • 6.13 关键概念 169
  • 6.14 本章小结 170
  • 6.15 复习题 170
  • 6.16 编程练习 174

    第7章 C控制语句:分支和跳转 177

  • 7.1 if语句 177
  • 7.2 if else语句 179
  • 7.2.1 另一个示例:介绍getchar()和putchar() 180
  • 7.2.2 ctype.h系列的字符函数 182
  • 7.2.3 多重选择else if 184
  • 7.2.4 else与if配对 186
  • 7.2.5 多层嵌套的if语句 187
  • 7.3 逻辑运算符 190
  • 7.3.1 备选拼写:iso646.h头文件 191
  • 7.3.2 优先级 192
  • 7.3.3 求值顺序 192
  • 7.3.4 范围 193
  • 7.4 一个统计单词的程序 194
  • 7.5 条件运算符:?: 196
  • 7.6 循环辅助:continue和break 198
  • 7.6.1 continue语句 198
  • 7.6.2 break语句 200
  • 7.7 多重选择:switch和break 202
  • 7.7.1 switch语句 204
  • 7.7.2 只读每行的首字符 205
  • 7.7.3 多重标签 206
  • 7.7.4 switch和if else 208
  • 7.8 goto语句 208
  • 7.9 关键概念 211
  • 7.10 本章小结 211
  • 7.11 复习题 212
  • 7.12 编程练习 214

    第8章 字符输入/输出和输入验证 217

  • 8.1 单字符I/O:getchar()和putchar() 217
  • 8.2 缓冲区 218
  • 8.3 结束键盘输入 219
  • 8.3.1 文件、流和键盘输入 219
  • 8.3.2 文件结尾 220
  • 8.4 重定向和文件 222
  • 8.5 创建更友好的用户界面 226
  • 8.5.1 使用缓冲输入 226
  • 8.5.2 混合数值和字符输入 228
  • 8.6 输入验证 230
  • 8.6.1 分析程序 234
  • 8.6.2 输入流和数字 234
  • 8.7 菜单浏览 235
  • 8.7.1 任务 235
  • 8.7.2 使执行更顺利 235
  • 8.7.3 混合字符和数值输入 237
  • 8.8 关键概念 240
  • 8.9 本章小结 240
  • 8.10 复习题 241
  • 8.11 编程练习 241

    第9章 函数 243

  • 9.1 复习函数 243
  • 9.1.1 创建并使用简单函数 244
  • 9.1.2 分析程序 245
  • 9.1.3 函数参数 247
  • 9.1.4 定义带形式参数的函数 248
  • 9.1.5 声明带形式参数函数的原型 249
  • 9.1.6 调用带实际参数的函数 249
  • 9.1.7 黑盒视角 250
  • 9.1.8 使用return从函数中返回值 250
  • 9.1.9 函数类型 252
  • 9.2 ANSI C函数原型 253
  • 9.2.1 问题所在 253
  • 9.2.2 ANSI的解决方案 254
  • 9.2.3 无参数和未指定参数 255
  • 9.2.4 函数原型的优点 256
  • 9.3 递归 256
  • 9.3.1 演示递归 256
  • 9.3.2 递归的基本原理 258
  • 9.3.3 尾递归 258
  • 9.3.4 递归和倒序计算 260
  • 9.3.5 递归的优缺点 262
  • 9.4 编译多源代码文件的程序 262
  • 9.4.1 UNIX 263
  • 9.4.2 Linux 263
  • 9.4.3 DOS命令行编译器 263
  • 9.4.4 Windows和苹果的IDE编译器 263
  • 9.4.5 使用头文件 263
  • 9.5 查找地址:&运算符 267
  • 9.6 更改主调函数中的变量 268
  • 9.7 指针简介 269
  • 9.7.1 间接运算符:* 270
  • 9.7.2 声明指针 270
  • 9.7.3 使用指针在函数间通信 271
  • 9.8 关键概念 274
  • 9.9 本章小结 275
  • 9.10 复习题 275
  • 9.11 编程练习 276

    第10章 数组和指针 277

  • 10.1 数组 277
  • 10.1.1 初始化数组 277
  • 10.1.2 指定初始化器(C99) 281
  • 10.1.3 给数组元素赋值 282
  • 10.1.4 数组边界 282
  • 10.1.5 指定数组的大小 284
  • 10.2 多维数组 284
  • 10.2.1 初始化二维数组 287
  • 10.2.2 其他多维数组 288
  • 10.3 指针和数组 288
  • 10.4 函数、数组和指针 290
  • 10.4.1 使用指针形参 293
  • 10.4.2 指针表示法和数组表示法 294
  • 10.5 指针操作 295
  • 10.6 保护数组中的数据 298
  • 10.6.1 对形式参数使用const 299
  • 10.6.2 const的其他内容 300
  • 10.7 指针和多维数组 302
  • 10.7.1 指向多维数组的指针 304
  • 10.7.2 指针的兼容性 305
  • 10.7.3 函数和多维数组 306
  • 10.8 变长数组(VLA) 309
  • 10.9 复合字面量 312
  • 10.10 关键概念 314
  • 10.11 本章小结 315
  • 10.12 复习题 316
  • 10.13 编程练习 317

    第11章 字符串和字符串函数 321

  • 11.1 表示字符串和字符串I/O 321
  • 11.1.1 在程序中定义字符串 322
  • 11.1.2 指针和字符串 328
  • 11.2 字符串输入 329
  • 11.2.1 分配空间 329
  • 11.2.2 不幸的gets()函数 330
  • 11.2.3 gets()的替代品 331
  • 11.2.4 scanf()函数 336
  • 11.3 字符串输出 337
  • 11.3.1 puts()函数 338
  • 11.3.2 fputs()函数 339
  • 11.3.3 printf()函数 339
  • 11.4 自定义输入/输出函数 340
  • 11.5 字符串函数 342
  • 11.5.1 strlen()函数 342
  • 11.5.2 strcat()函数 343
  • 11.5.3 strncat()函数 345
  • 11.5.4 strcmp()函数 346
  • 11.5.5 strcpy()和strncpy()函数 351
  • 11.5.6 sprintf()函数 356
  • 11.5.7 其他字符串函数 357
  • 11.6 字符串示例:字符串排序 359
  • 11.6.1 排序指针而非字符串 360
  • 11.6.2 选择排序算法 361
  • 11.7 ctype.h字符函数和字符串 362
  • 11.8 命令行参数 363
  • 11.8.1 集成环境中的命令行参数 365
  • 11.8.2 Macintosh中的命令行参数 365
  • 11.9 把字符串转换为数字 365
  • 11.10 关键概念 368
  • 11.11 本章小结 368
  • 11.12 复习题 369
  • 11.13 编程练习 371

    第12章 存储类别、链接和内存管理 373

  • 12.1 存储类别 373
  • 12.1.1 作用域 374
  • 12.1.2 链接 376
  • 12.1.3 存储期 376
  • 12.1.4 自动变量 377
  • 12.1.5 寄存器变量 380
  • 12.1.6 块作用域的静态变量 381
  • 12.1.7 外部链接的静态变量 382
  • 12.1.8 内部链接的静态变量 386
  • 12.1.9 多文件 386
  • 12.1.10 存储类别说明符 387
  • 12.1.11 存储类别和函数 389
  • 12.1.12 存储类别的选择 389
  • 12.2 随机数函数和静态变量 390
  • 12.3 掷骰子 393
  • 12.4 分配内存:malloc()和free() 396
  • 12.4.1 free()的重要性 399
  • 12.4.2 calloc()函数 400
  • 12.4.3 动态内存分配和变长数组 400
  • 12.4.4 存储类别和动态内存分配 401
  • 12.5 ANSI C类型限定符 402
  • 12.5.1 const类型限定符 403
  • 12.5.2 volatile类型限定符 404
  • 12.5.3 restrict类型限定符 405
  • 12.5.4 _Atomic类型限定符(C11) 406
  • 12.5.5 旧关键字的新位置 406
  • 12.6 关键概念 407
  • 12.7 本章小结 407
  • 12.8 复习题 408
  • 12.9 编程练习 409

    第13章 文件输入/输出 413

  • 13.1 与文件进行通信 413
  • 13.1.1 文件是什么 413
  • 13.1.2 文本模式和二进制模式 413
  • 13.1.3 I/O的级别 415
  • 13.1.4 标准文件 415
  • 13.2 标准I/O 415
  • 13.2.1 检查命令行参数 416
  • 13.2.2 fopen()函数 416
  • 13.2.3 getc()和putc()函数 417
  • 13.2.4 文件结尾 418
  • 13.2.5 fclose()函数 419
  • 13.2.6 指向标准文件的指针 419
  • 13.3 一个简单的文件压缩程序 419
  • 13.4 文件I/O:fprintf()、fscanf()、fgets()和fputs() 421
  • 13.4.1 fprintf()和fscanf()函数 421
  • 13.4.2 fgets()和fputs()函数 422
  • 13.5 随机访问:fseek()和ftell() 423
  • 13.5.1 fseek()和ftell()的工作原理 424
  • 13.5.2 二进制模式和文本模式 425
  • 13.5.3 可移植性 425
  • 13.5.4 fgetpos()和fsetpos()函数 426
  • 13.6 标准I/O的机理 426
  • 13.7 其他标准I/O函数 427
  • 13.7.1 int ungetc(int c, FILE *fp)函数 427
  • 13.7.2 int fflush()函数 428
  • 13.7.3 int setvbuf()函数 428
  • 13.7.4 二进制I/O:fread()和fwrite() 428
  • 13.7.5 size_t fwrite()函数 429
  • 13.7.6 size_t fread()函数 430
  • 13.7.7 int feof(FILE fp)和int ferror(FILE fp)函数 430
  • 13.7.8 一个程序示例 430
  • 13.7.9 用二进制I/O进行随机访问 433
  • 13.8 关键概念 435
  • 13.9 本章小结 435
  • 13.10 复习题 435
  • 13.11 编程练习 437

    第14章 结构和其他数据形式 439

  • 14.1 示例问题:创建图书目录 439
  • 14.2 建立结构声明 441
  • 14.3 定义结构变量 441
  • 14.3.1 初始化结构 442
  • 14.3.2 访问结构成员 443
  • 14.3.3 结构的初始化器 443
  • 14.4 结构数组 444
  • 14.4.1 声明结构数组 446
  • 14.4.2 标识结构数组的成员 447
  • 14.4.3 程序讨论 447
  • 14.5 嵌套结构 448
  • 14.6 指向结构的指针 449
  • 14.6.1 声明和初始化结构指针 450
  • 14.6.2 用指针访问成员 451
  • 14.7 向函数传递结构的信息 451
  • 14.7.1 传递结构成员 451
  • 14.7.2 传递结构的地址 452
  • 14.7.3 传递结构 453
  • 14.7.4 其他结构特性 454
  • 14.7.5 结构和结构指针的选择 458
  • 14.7.6 结构中的字符数组和字符指针 458
  • 14.7.7 结构、指针和malloc() 459
  • 14.7.8 复合字面量和结构(C99) 462
  • 14.7.9 伸缩型数组成员(C99) 463
  • 14.7.10 匿名结构(C11) 465
  • 14.7.11 使用结构数组的函数 466
  • 14.8 把结构内容保存到文件中 467
  • 14.8.1 保存结构的程序示例 468
  • 14.8.2 程序要点 470
  • 14.9 链式结构 471
  • 14.10 联合简介 472
  • 14.10.1 使用联合 472
  • 14.10.2 匿名联合(C11) 473
  • 14.11 枚举类型 474
  • 14.11.1 enum常量 475
  • 14.11.2 默认值 475
  • 14.11.3 赋值 475
  • 14.11.4 enum的用法 476
  • 14.11.5 共享名称空间 477
  • 14.12 typedef简介 478
  • 14.13 其他复杂的声明 479
  • 14.14 函数和指针 481
  • 14.15 关键概念 487
  • 14.16 本章小结 487
  • 14.17 复习题 488
  • 14.18 编程练习 490

    第15章 位操作 493

  • 15.1 二进制数、位和字节 493
  • 15.1.1 二进制整数 494
  • 15.1.2 有符号整数 494
  • 15.1.3 二进制浮点数 495
  • 15.2 其他进制数 495
  • 15.2.1 八进制 495
  • 15.2.2 十六进制 496
  • 15.3 C按位运算符 496
  • 15.3.1 按位逻辑运算符 497
  • 15.3.2 用法:掩码 498
  • 15.3.3 用法:打开位(设置位) 498
  • 15.3.4 用法:关闭位(清空位) 499
  • 15.3.5 用法:切换位 499
  • 15.3.6 用法:检查位的值 500
  • 15.3.7 移位运算符 500
  • 15.3.8 编程示例 501
  • 15.3.9 另一个例子 503
  • 15.4 位字段 505
  • 15.4.1 位字段示例 506
  • 15.4.2 位字段和按位运算符 509
  • 15.5 对齐特性(C11) 515
  • 15.6 关键概念 516
  • 15.7 本章小结 516
  • 15.8 复习题 517
  • 15.9 编程练习 518

    第16章 C预处理器和C库 521

  • 16.1 翻译程序的第一步 521
  • 16.2 明示常量:#define 522
  • 16.2.1 记号 525
  • 16.2.2 重定义常量 525
  • 16.3 在#define中使用参数 525
  • 16.3.1 用宏参数创建字符串:#运算符 527
  • 16.3.2 预处理器黏合剂:##运算符 528
  • 16.3.3 变参宏:...和_ _VAARGS _ 529
  • 16.4 宏和函数的选择 530
  • 16.5 文件包含:#include 531
  • 16.5.1 头文件示例 531
  • 16.5.2 使用头文件 533
  • 16.6 其他指令 534
  • 16.6.1 #undef指令 534
  • 16.6.2 从C预处理器角度看已定义 534
  • 16.6.3 条件编译 535
  • 16.6.4 预定义宏 539
  • 16.6.5 #line和#error 540
  • 16.6.6 #pragma 540
  • 16.6.7 泛型选择(C11) 541
  • 16.7 内联函数(C99) 542
  • 16.8 _Noreturn函数(C11) 544
  • 16.9 C库 544
  • 16.9.1 访问C库 544
  • 16.9.2 使用库描述 545
  • 16.10 数学库 546
  • 16.10.1 三角问题 547
  • 16.10.2 类型变体 548
  • 16.10.3 tgmath.h库(C99) 550
  • 16.11 通用工具库 550
  • 16.11.1 exit()和atexit()函数 550
  • 16.11.2 qsort()函数 552
  • 16.12 断言库 556
  • 16.12.1 assert的用法 556
  • 16.12.2 _Static_assert(C11) 557
  • 16.13 string.h库中的memcpy()和memmove() 558
  • 16.14 可变参数:stdarg.h 560
  • 16.15 关键概念 562
  • 16.16 本章小结 562
  • 16.17 复习题 562
  • 16.18 编程练习 563

    第17章 高级数据表示 567

  • 17.1 研究数据表示 567
  • 17.2 从数组到链表 570
  • 17.2.1 使用链表 572
  • 17.2.2 反思 576
  • 17.3 抽象数据类型(ADT) 576
  • 17.3.1 建立抽象 577
  • 17.3.2 建立接口 578
  • 17.3.3 使用接口 581
  • 17.3.4 实现接口 583
  • 17.4 队列ADT 589
  • 17.4.1 定义队列抽象数据类型 590
  • 17.4.2 定义一个接口 590
  • 17.4.3 实现接口数据表示 591
  • 17.4.4 测试队列 598
  • 17.5 用队列进行模拟 600
  • 17.6 链表和数组 605
  • 17.7 二叉查找树 608
  • 17.7.1 二叉树ADT 608
  • 17.7.2 二叉查找树接口 609
  • 17.7.3 二叉树的实现 611
  • 17.7.4 使用二叉树 624
  • 17.7.5 树的思想 628
  • 17.8 其他说明 629
  • 17.9 关键概念 630
  • 17.10 本章小结 630
  • 17.11 复习题 630
  • 17.12 编程练习 631
  • 附录A 复习题答案 633
  • 附录B 参考资料 665
  • B.1 参考资料I:补充阅读 665
  • B.2 参考资料II:C运算符 667
  • B.3 参考资料III:基本类型和存储类别 671
  • B.4 参考资料IV:表达式、语句和程序流 675
  • B.5 参考资料V:新增C99和C11的ANSI C库 679
  • B.6 参考资料VI:扩展的整数类型 714
  • B.7 参考资料VII:扩展字符支持 716
  • B.8 参考资料VIII:C99/C11数值计算增强 720
  • B.9 参考资料IX:C和C++的区别 726

书摘

有很多人看我,都没有摘!

微信公众号

有课学公众号
  • 微信公众号: geekdaxue