征服C指针 第2版

征服C指针 第2版
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [日]
2021-03
版次: 2
ISBN: 9787115554895
定价: 99.00
装帧: 平装
开本: 其他
纸张: 胶版纸
页数: 333页
字数: 420千字
16人买过
  • 本书以C语言中的重难点“指针”为主题,提供了程序员所需的深入而完整的指针知识。作者结合多年的编程经验和感悟,从C指针的概念讲起,通过实验一步一步地揭示了指针和数组、内存、数据结构的关系,展现了指针的常见用法,揭示了各种使用技巧,还通过独特的方式告诉读者怎样解读C语言那些让人“纠结”的声明语法,以及如何绕过C指针的陷阱等。第2版基于64位操作系统对内容进行了大幅修订,新增了对ISO-C99、C11标准下相关内容的介绍等。
      本书非常适合C语言中级学习者阅读,也可作为计算机专业学生学习C语言的参考。 前桥和弥(作者)

    1969年出生,著有《自制编程语言》《彻底掌握C语言》《Java之谜和陷阱》等,其一针见血的“毒舌”文风和对编程语言深刻的见地受到广大读者的欢迎。

    朱文佳(译者)

    2005年毕业于上海大学计算机科学与技术学院,在对日通信行业从事开发及管理十余年,具有丰富的嵌入式C语言开发及项目管理经验。爱好阅读,自学日语,愿尽自己绵薄之力为大家分享优秀的外国图书。 第0章

    本书目标与读者对象 1

    0-1 本书目标 2

    0-2 读者对象与内容结构 5

    第 1章

    打好基础——预备知识和复习 9

    1-1 C语言是什么样的语言 10

    1-1-1 C语言的发展历程 10

     是汇编语言还是汇编器 11

     B语言是什么样的语言 12

    1-1-2 不完备和不统一的语法 13

    1-1-3 C语言“圣经”——K&R 13

    1-1-4 ANSI C之前的C语言 14

    1-1-5 ANSI C(C89/90) 16

    1-1-6 C95 16

    1-1-7 C99 17

    1-1-8 C11 18

    1-1-9 C语言的理念 19

    1-1-10 C语言的主体 20

    1-1-11 C语言曾是只能使用标量的语言 21

    1-2 内存和地址 23

    1-2-1 内存和地址 23

    1-2-2 内存和变量 25

     size_t类型 27

    1-2-3 内存和程序运行 27

    1-3 关于指针 29

    1-3-1 恶名昭著的指针究竟是什么 29

    1-3-2 和指针的第 一次亲密接触 30

    1-3-3 地址运算符、间接运算符、下标运算符 34

     关于本书中的地址值——16进制表示法 35

     混乱的声明——如何自然地理解声明 35

     杂谈:hoge是什么 37

    1-3-4 指针和地址之间的微妙关系 38

     在运行时既没有类型信息,也没有变量名 40

    1-3-5 指针运算 41

    1-3-6 何谓空指针 42

     NULL和0和\'\\0\' 43

    1-3-7 实践——从函数返回多个值 46

     形参与实参 50

    1-4 关于数组 51

    1-4-1 使用数组 51

     C语言的数组是从0开始的 53

    1-4-2 数组与指针的微妙关系 54

    1-4-3 下标运算符[]与数组毫无关系 56

     语法糖 59

    1-4-4 为何存在指针运算这种奇怪功能 59

    1-4-5 别再滥用指针运算了 61

     更改参数的做法可取吗 62

    1-4-6 试图将数组作为函数参数传递 63

     如果对数组进行值传递 65

    1-4-7 声明函数形参的方法 66

     C语言为什么不进行数组边界检查 67

    1-4-8 C99中的可变长数组 68

    第 2章

    做个实验——C语言是怎样使用内存的 71

    2-1 虚拟地址 72

     关于scanf() 75

     未定义、未指定、实现定义 77

    2-2 C语言中内存的使用方法 78

    2-2-1 C语言中变量的种类 78

    2-2-2 尝试输出地址 80

     存储类说明符 80

    2-3 函数与字符串字面量 85

    2-3-1 只读内存区域 85

    2-3-2 指向函数的指针 86

    2-4 静态变量 88

    2-4-1 什么是静态变量 88

    2-4-2 分割编译与链接 88

    2-5 自动变量(栈) 91

    2-5-1 内存空间的“重复使用” 91

    2-5-2 函数调用究竟发生了什么 91

     调用约定 95

    2-5-3 自动变量的引用 95

     一旦函数执行结束,自动变量的内存空间就会被释放 98

    2-5-4 典型的安全漏洞——缓冲区溢出漏洞 99

     操作系统针对缓冲区溢出漏洞给出的对策 102

    2-5-5 可变长参数 103

     assert() 106

     试写一个用于调试的函数 107

    2-5-6 递归调用 110

    2-5-7 C99中的可变长数组(VLA)的栈 113

    2-6 利用malloc()动态分配内存(堆) 116

    2-6-1 malloc()的基础知识 116

     应该强制转换malloc()的返回值类型吗 119

    2-6-2 malloc()是系统调用吗 119

    2-6-3 malloc()中发生了什么 120

    2-6-4 free()之后相应的内存空间会怎样 122

     Valgrind 124

    2-6-5 碎片化 124

    2-6-6 malloc()以外的动态内存分配函数 125

     假如malloc()参数为0 127

     malloc()的返回值检查 128

     程序结束时也必须调用free()吗 129

    2-7 对齐 131

     结构体的成员名称在运行时也是缺失的 134

    2-8 字节序 135

    2-9 关于语言规范和实现——抱歉,前面的内容都是骗你的 137

    第3章

    语法揭秘——它到底是怎么回事 139

    3-1 解读C语言声明 140

    3-1-1 用英语阅读 140

    3-1-2 解读C语言声明 141

     近来的语言多数是将类型后置的 144

    3-1-3 类型名 145

     如果把间接运算符*后置 146

    3-2 C语言数据类型的模型 147

    3-2-1 基本类型和派生类型 147

    3-2-2 指针类型的派生 148

    3-2-3 数组类型的派生 150

    3-2-4 什么是指向数组的指针 150

    3-2-5 C语言中不存在多维数组 152

    3-2-6 函数类型的派生 154

    3-2-7 计算类型的长度 155

    3-2-8 基本类型 157

    3-2-9 结构体和联合体 159

    3-2-10 不完全类型 159

    3-3 表达式 162

    3-3-1 表达式和数据类型 162

     对“表达式”使用sizeof 164

    3-3-2 什么是左值——变量的两张面孔 166

     “左值”的由来 167

    3-3-3 数组→指针的转换 168

    3-3-4 与数组和指针相关的运算符 169

    3-3-5 多维数组 171

     运算符的优先级 173

    3-4 解读C语言声明(续) 176

    3-4-1 const修饰符 176

    3-4-2 如何使用const?可以用到哪种程度 178

     const可以代替#define吗 181

    3-4-3 typedef 181

    3-5 其他 185

    3-5-1 函数形参的声明(ANSI C版) 185

     K&R中关于函数形参声明的说明 186

    3-5-2 函数形参的声明(C99版) 188

    3-5-3 关于空的下标运算符[] 189

     定义与声明 191

    3-5-4 字符串字面量 192

     字符串字面量是char的数组 194

    3-5-5 关于指向函数的指针引发的混乱 195

    3-5-6 强制类型转换 196

    3-5-7 练习——解读复杂声明 198

    3-6 请记住:数组与指针截然不同 203

    3-6-1 你为什么感到混乱 203

    3-6-2 在表达式中 204

    3-6-3 在声明中 206

    第4章

    数组和指针的常见用法 209

    4-1 基本用法 210

    4-1-1 通过返回值以外的方法返回 210

    4-1-2 将数组作为函数的参数传递 211

    4-1-3 动态数组——通过malloc()分配的可变长数组 212

     其他语言的数组 214

    4-2 组合使用 216

    4-2-1 动态数组的数组 216

     宽字符 223

    4-2-2 动态数组的动态数组 225

    4-2-3 命令行参数 228

    4-2-4 通过参数返回指针 230

     什么是“双指针” 235

    4-2-5 将多维数组作为函数的参数传递 236

    4-2-6 将多维数组作为函数的参数传递(VLA版) 237

    4-2-7 通过malloc()分配纵横可变的二维数组(C99) 239

     C语言中的多维数组是行优先的 240

     纵横可变的二维数组的ANSI C实现 241

     Java和C#的多维数组 242

    4-2-8 数组的动态数组 243

    4-2-9 在考虑可变之前,不妨考虑使用结构体 244

    4-2-10 可变长结构体(ANSI C版) 246

     关于分配可变长结构体时的长度指定 248

    4-2-11 柔性数组成员(C99) 248

     指针可以指向数组的最后一个元素的下一个元素 249

    第5章

    数据结构——指针的真正用法 251

    5-1 案例学习1:计算单词的使用频率 252

    5-1-1 案例的需求 252

     各种语言中指针的叫法 253

     引用传递 253

    5-1-2 设计 256

     关于头文件的写法 259

    5-1-3 数组版 261

    5-1-4 链表版 265

     头文件的公有和私有 271

     当需要同时处理多个数据时 272

     迭代器 273

    5-1-5 添加查找功能 275

     翻倍游戏 277

    5-1-6 其他数据结构 277

    5-2 案例学习2:绘图工具的数据结构 283

    5-2-1 案例的需求 283

    5-2-2 表示各种图形 284

     关于坐标系 285

    5-2-3 Shape类型 286

    5-2-4 讨论——还有其他方法吗 289

     能保存任何类型的链表 293

    5-2-5 图形的组合 294

    5-2-6 通过指向函数的指针的数组分配处理 300

    5-2-7 通往继承与多态之路 302

     将draw()放入Shape中真的好吗 302

    5-2-8 指针的可怕之处 304

    5-2-9 那么,指针到底是什么呢 305

    第6章

    其他——拾遗 307

    6-1 新的函数组 308

    6-1-1 添加了范围检查的函数(C11) 308

     restrict关键字 310

    6-1-2 无须使用静态存储空间的函数(C11) 311

    6-2 陷阱 314

    6-2-1 整数提升 314

    6-2-2 如果在(老式的)C语言中使用float类型的参数 316

    6-2-3 printf()与scanf() 318

    6-2-4 原型声明的光与影 319

    6-3 惯用写法 321

    6-3-1 结构体声明 321

    6-3-2 自引用结构体 322

    6-3-3 结构体的相互引用 323

    6-3-4 结构体的嵌套 324

    6-3-5 联合体 325

    6-3-6 无名结构体和无名联合体(C11) 326

    6-3-7 数组的初始化 327

    6-3-8 指向char的指针的数组的初始化 328

    6-3-9 结构体的初始化 329

    6-3-10 联合体的初始化 330

    6-3-11 指定初始化(C99) 331

    6-3-12 复合字面量(C99) 332

    参考文献 334
  • 内容简介:
    本书以C语言中的重难点“指针”为主题,提供了程序员所需的深入而完整的指针知识。作者结合多年的编程经验和感悟,从C指针的概念讲起,通过实验一步一步地揭示了指针和数组、内存、数据结构的关系,展现了指针的常见用法,揭示了各种使用技巧,还通过独特的方式告诉读者怎样解读C语言那些让人“纠结”的声明语法,以及如何绕过C指针的陷阱等。第2版基于64位操作系统对内容进行了大幅修订,新增了对ISO-C99、C11标准下相关内容的介绍等。
      本书非常适合C语言中级学习者阅读,也可作为计算机专业学生学习C语言的参考。
  • 作者简介:
    前桥和弥(作者)

    1969年出生,著有《自制编程语言》《彻底掌握C语言》《Java之谜和陷阱》等,其一针见血的“毒舌”文风和对编程语言深刻的见地受到广大读者的欢迎。

    朱文佳(译者)

    2005年毕业于上海大学计算机科学与技术学院,在对日通信行业从事开发及管理十余年,具有丰富的嵌入式C语言开发及项目管理经验。爱好阅读,自学日语,愿尽自己绵薄之力为大家分享优秀的外国图书。
  • 目录:
    第0章

    本书目标与读者对象 1

    0-1 本书目标 2

    0-2 读者对象与内容结构 5

    第 1章

    打好基础——预备知识和复习 9

    1-1 C语言是什么样的语言 10

    1-1-1 C语言的发展历程 10

     是汇编语言还是汇编器 11

     B语言是什么样的语言 12

    1-1-2 不完备和不统一的语法 13

    1-1-3 C语言“圣经”——K&R 13

    1-1-4 ANSI C之前的C语言 14

    1-1-5 ANSI C(C89/90) 16

    1-1-6 C95 16

    1-1-7 C99 17

    1-1-8 C11 18

    1-1-9 C语言的理念 19

    1-1-10 C语言的主体 20

    1-1-11 C语言曾是只能使用标量的语言 21

    1-2 内存和地址 23

    1-2-1 内存和地址 23

    1-2-2 内存和变量 25

     size_t类型 27

    1-2-3 内存和程序运行 27

    1-3 关于指针 29

    1-3-1 恶名昭著的指针究竟是什么 29

    1-3-2 和指针的第 一次亲密接触 30

    1-3-3 地址运算符、间接运算符、下标运算符 34

     关于本书中的地址值——16进制表示法 35

     混乱的声明——如何自然地理解声明 35

     杂谈:hoge是什么 37

    1-3-4 指针和地址之间的微妙关系 38

     在运行时既没有类型信息,也没有变量名 40

    1-3-5 指针运算 41

    1-3-6 何谓空指针 42

     NULL和0和\'\\0\' 43

    1-3-7 实践——从函数返回多个值 46

     形参与实参 50

    1-4 关于数组 51

    1-4-1 使用数组 51

     C语言的数组是从0开始的 53

    1-4-2 数组与指针的微妙关系 54

    1-4-3 下标运算符[]与数组毫无关系 56

     语法糖 59

    1-4-4 为何存在指针运算这种奇怪功能 59

    1-4-5 别再滥用指针运算了 61

     更改参数的做法可取吗 62

    1-4-6 试图将数组作为函数参数传递 63

     如果对数组进行值传递 65

    1-4-7 声明函数形参的方法 66

     C语言为什么不进行数组边界检查 67

    1-4-8 C99中的可变长数组 68

    第 2章

    做个实验——C语言是怎样使用内存的 71

    2-1 虚拟地址 72

     关于scanf() 75

     未定义、未指定、实现定义 77

    2-2 C语言中内存的使用方法 78

    2-2-1 C语言中变量的种类 78

    2-2-2 尝试输出地址 80

     存储类说明符 80

    2-3 函数与字符串字面量 85

    2-3-1 只读内存区域 85

    2-3-2 指向函数的指针 86

    2-4 静态变量 88

    2-4-1 什么是静态变量 88

    2-4-2 分割编译与链接 88

    2-5 自动变量(栈) 91

    2-5-1 内存空间的“重复使用” 91

    2-5-2 函数调用究竟发生了什么 91

     调用约定 95

    2-5-3 自动变量的引用 95

     一旦函数执行结束,自动变量的内存空间就会被释放 98

    2-5-4 典型的安全漏洞——缓冲区溢出漏洞 99

     操作系统针对缓冲区溢出漏洞给出的对策 102

    2-5-5 可变长参数 103

     assert() 106

     试写一个用于调试的函数 107

    2-5-6 递归调用 110

    2-5-7 C99中的可变长数组(VLA)的栈 113

    2-6 利用malloc()动态分配内存(堆) 116

    2-6-1 malloc()的基础知识 116

     应该强制转换malloc()的返回值类型吗 119

    2-6-2 malloc()是系统调用吗 119

    2-6-3 malloc()中发生了什么 120

    2-6-4 free()之后相应的内存空间会怎样 122

     Valgrind 124

    2-6-5 碎片化 124

    2-6-6 malloc()以外的动态内存分配函数 125

     假如malloc()参数为0 127

     malloc()的返回值检查 128

     程序结束时也必须调用free()吗 129

    2-7 对齐 131

     结构体的成员名称在运行时也是缺失的 134

    2-8 字节序 135

    2-9 关于语言规范和实现——抱歉,前面的内容都是骗你的 137

    第3章

    语法揭秘——它到底是怎么回事 139

    3-1 解读C语言声明 140

    3-1-1 用英语阅读 140

    3-1-2 解读C语言声明 141

     近来的语言多数是将类型后置的 144

    3-1-3 类型名 145

     如果把间接运算符*后置 146

    3-2 C语言数据类型的模型 147

    3-2-1 基本类型和派生类型 147

    3-2-2 指针类型的派生 148

    3-2-3 数组类型的派生 150

    3-2-4 什么是指向数组的指针 150

    3-2-5 C语言中不存在多维数组 152

    3-2-6 函数类型的派生 154

    3-2-7 计算类型的长度 155

    3-2-8 基本类型 157

    3-2-9 结构体和联合体 159

    3-2-10 不完全类型 159

    3-3 表达式 162

    3-3-1 表达式和数据类型 162

     对“表达式”使用sizeof 164

    3-3-2 什么是左值——变量的两张面孔 166

     “左值”的由来 167

    3-3-3 数组→指针的转换 168

    3-3-4 与数组和指针相关的运算符 169

    3-3-5 多维数组 171

     运算符的优先级 173

    3-4 解读C语言声明(续) 176

    3-4-1 const修饰符 176

    3-4-2 如何使用const?可以用到哪种程度 178

     const可以代替#define吗 181

    3-4-3 typedef 181

    3-5 其他 185

    3-5-1 函数形参的声明(ANSI C版) 185

     K&R中关于函数形参声明的说明 186

    3-5-2 函数形参的声明(C99版) 188

    3-5-3 关于空的下标运算符[] 189

     定义与声明 191

    3-5-4 字符串字面量 192

     字符串字面量是char的数组 194

    3-5-5 关于指向函数的指针引发的混乱 195

    3-5-6 强制类型转换 196

    3-5-7 练习——解读复杂声明 198

    3-6 请记住:数组与指针截然不同 203

    3-6-1 你为什么感到混乱 203

    3-6-2 在表达式中 204

    3-6-3 在声明中 206

    第4章

    数组和指针的常见用法 209

    4-1 基本用法 210

    4-1-1 通过返回值以外的方法返回 210

    4-1-2 将数组作为函数的参数传递 211

    4-1-3 动态数组——通过malloc()分配的可变长数组 212

     其他语言的数组 214

    4-2 组合使用 216

    4-2-1 动态数组的数组 216

     宽字符 223

    4-2-2 动态数组的动态数组 225

    4-2-3 命令行参数 228

    4-2-4 通过参数返回指针 230

     什么是“双指针” 235

    4-2-5 将多维数组作为函数的参数传递 236

    4-2-6 将多维数组作为函数的参数传递(VLA版) 237

    4-2-7 通过malloc()分配纵横可变的二维数组(C99) 239

     C语言中的多维数组是行优先的 240

     纵横可变的二维数组的ANSI C实现 241

     Java和C#的多维数组 242

    4-2-8 数组的动态数组 243

    4-2-9 在考虑可变之前,不妨考虑使用结构体 244

    4-2-10 可变长结构体(ANSI C版) 246

     关于分配可变长结构体时的长度指定 248

    4-2-11 柔性数组成员(C99) 248

     指针可以指向数组的最后一个元素的下一个元素 249

    第5章

    数据结构——指针的真正用法 251

    5-1 案例学习1:计算单词的使用频率 252

    5-1-1 案例的需求 252

     各种语言中指针的叫法 253

     引用传递 253

    5-1-2 设计 256

     关于头文件的写法 259

    5-1-3 数组版 261

    5-1-4 链表版 265

     头文件的公有和私有 271

     当需要同时处理多个数据时 272

     迭代器 273

    5-1-5 添加查找功能 275

     翻倍游戏 277

    5-1-6 其他数据结构 277

    5-2 案例学习2:绘图工具的数据结构 283

    5-2-1 案例的需求 283

    5-2-2 表示各种图形 284

     关于坐标系 285

    5-2-3 Shape类型 286

    5-2-4 讨论——还有其他方法吗 289

     能保存任何类型的链表 293

    5-2-5 图形的组合 294

    5-2-6 通过指向函数的指针的数组分配处理 300

    5-2-7 通往继承与多态之路 302

     将draw()放入Shape中真的好吗 302

    5-2-8 指针的可怕之处 304

    5-2-9 那么,指针到底是什么呢 305

    第6章

    其他——拾遗 307

    6-1 新的函数组 308

    6-1-1 添加了范围检查的函数(C11) 308

     restrict关键字 310

    6-1-2 无须使用静态存储空间的函数(C11) 311

    6-2 陷阱 314

    6-2-1 整数提升 314

    6-2-2 如果在(老式的)C语言中使用float类型的参数 316

    6-2-3 printf()与scanf() 318

    6-2-4 原型声明的光与影 319

    6-3 惯用写法 321

    6-3-1 结构体声明 321

    6-3-2 自引用结构体 322

    6-3-3 结构体的相互引用 323

    6-3-4 结构体的嵌套 324

    6-3-5 联合体 325

    6-3-6 无名结构体和无名联合体(C11) 326

    6-3-7 数组的初始化 327

    6-3-8 指向char的指针的数组的初始化 328

    6-3-9 结构体的初始化 329

    6-3-10 联合体的初始化 330

    6-3-11 指定初始化(C99) 331

    6-3-12 复合字面量(C99) 332

    参考文献 334
查看详情
相关图书 / 更多
征服C指针 第2版
征服世界的中国美食 《康小智图说系列 影响世界的中国传承》
陈长海
征服C指针 第2版
征服人工智能(我的未来世界·迷境大冒险科学漫画)
穆秋月 译;[韩]柳大永 著 (韩)崔优斌 绘 (韩)李信牧 监修
征服C指针 第2版
征服亚马孙:亚马孙河徒步搏命之旅
埃德·斯塔福德 著;纪乃良 译;联合读创 出品
征服C指针 第2版
征服世界完全手册
瑞安·诺思
征服C指针 第2版
征服自然水、景观与现代德国的形成
[美]大卫·布莱克本 著;王皖强、赵万里 译
征服C指针 第2版
征服格拉纳达
[美]华盛顿·欧文(Washington Irving) 著;刘荣跃 译
征服C指针 第2版
征服的怒潮:1942—1944,从瓜岛战役到菲律宾海战役
伊恩·托尔
征服C指针 第2版
征服六个你
无影有踪
征服C指针 第2版
征服与文化
托马斯·索威尔
征服C指针 第2版
征服Power BI:提升办公数字化能力的45个实战技巧
雷元 著
征服C指针 第2版
征服法国外籍军团的华人特种兵(从被质疑、被排挤到被尊重,一个华人特种兵亲口讲述在法国外籍特种部队的10年魔鬼服役生涯)
朱洪海
征服C指针 第2版
征服
[加拿大]邝大卫 著;张明敏 译;湛庐文化 出品
您可能感兴趣 / 更多
征服C指针 第2版
寻羊冒险记
[日]村上春树
征服C指针 第2版
听风的歌
[日]村上春树
征服C指针 第2版
绫辻行人的馆
[日]绫辻行人 著
征服C指针 第2版
卡皮巴拉不烦恼:如何像水豚一样远离内耗
[日]草薙龙瞬 著;许天小 译;时代华语 出品
征服C指针 第2版
轨迹queue: Kii Kanna作品集(赠PVC卡×1,明信片×4,拍立得风小卡×2)硬壳精装
[日]Kii Kanna 著;加缪的猫 译;天闻角川 出品
征服C指针 第2版
明清与李朝时代
[日]岸本美绪 后浪
征服C指针 第2版
泡泡先生
[日]吉田隆大 文图
征服C指针 第2版
枕头仙人:全二册
[日]加岳井广/著 王志庚 译
征服C指针 第2版
汗青堂丛书048·科举史(新)
[日]宫崎市定 后浪
征服C指针 第2版
人体极限:了解你的健康限度
[日]山崎昌广
征服C指针 第2版
神奇牙膏(宫西达也图画书)激发神奇想象力,让孩子爱上刷牙
[日]宫西达也 著;彭懿 译
征服C指针 第2版
恶意心理学
[日]冈本真一郎