目录
第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和' ' 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
作者介绍
前桥和弥(作者) 1969年出生,著有《自制编程语言》《彻底掌握C语言》《Java之谜和陷阱》等,其一针见血的“毒舌”文风和对编程语言深刻的见地受到广大读者的欢迎。 朱文佳(译者) 2005年毕业于上海大学计算机科学与技术学院,在对日通信行业从事开发及管理十余年,具有丰富的嵌入式C语言开发及项目管理经验。爱好阅读,自学日语,愿尽自己绵薄之力为大家分享*秀的外国图书。
关联推荐
日本“毒舌”程序员透彻讲解指针、数组和声明,助你轻松进阶;畅销书全面升级;配套代码资源可下载
发货方式
自动:在特色服务中标有自动发货的商品,拍下后,源码类 软件类 商品会在订单详情页显示来自卖家的商品下载链接,点卡类 商品会在订单详情直接显示卡号密码。
手动:未标有自动发货的的商品,付款后,商品卖家会收到平台的手机短信、邮件提醒,卖家会尽快为您发货,如卖家长时间未发货,买家也可通过订单上的QQ或电话主动联系卖家。
退款说明
1、源码类:商品详情(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、功能不能正常使用等)!有演示站时,与实际源码不一致的(但描述中有"不保证完全一样、可能有少许偏差"类似显著公告的除外);
2、营销推广类:未达到卖家描述标准的;
3、点卡软件类:所售点卡软件无法使用的;
3、发货:手动发货商品,在卖家未发货前就申请了退款的;
4、服务:卖家不提供承诺的售后服务的;(双方提前有商定和描述中有显著声明的除外)
5、其他:如商品或服务有质量方面的硬性常规问题的。未符合详情及卖家承诺的。
注:符合上述任一情况的,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法修改描述!
注意事项
1、在付款前,双方在QQ上所商定的内容,也是纠纷评判依据(商定与商品描述冲突时,以商定为准);
2、源码商品,同时有网站演示与商品详情图片演示,且网站演示与商品详情图片演示不一致的,默认按商品详情图片演示作为纠纷评判依据(卖家有特别声明或有额外商定的除外);
3、点卡软件商品,默认按商品详情作为纠纷评判依据(特别声明或有商定除外);
4、营销推广商品,默认按商品详情作为纠纷评判依据(特别声明或有商定除外);
5、在有"正当退款原因和依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;
6、虽然交易产生纠纷的几率很小,卖家也肯定会给买家最完善的服务!但请买卖双方尽量保留如聊天记录这样的重要信息,以防产生纠纷时便于送码网快速介入处理。
送码声明
1、送码网作为第三方中介平台,依据双方交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;
2、非平台线上交易的项目,出现任何后果均与送码网无关;无论卖家以何理由要求线下交易的(如:要求买家支付宝转账付款的,微信转账付款的等),请联系管理举报,本平台将清退卖家处理。
正版 steam 原子之心 Atomic Heart 国区激活码 cd...
steam 英雄连3 国区激活码CDKEY PC游戏正版 Compan...
【骑砍中文站】PC 中文Steam 骑马与砍杀2 霸主 骑砍2 豪华版...
正版 steam 原子之心 Atomic Heart 国区激活码 cd...
M,日朋礼送男友老公创意实人用星人际机器蓝牙音箱走心情节生礼...
PC中文正版Steam 消逝的光芒2 消失的光芒2 Dying Lig...
Steam 女神异闻录5 皇家版 国区激活码CDKey秒发 Perso...
Steam怪物猎人崛起 曙光DLC 激活码cdkey 怪物猎人曙光 M...
steam 只狼 激活码CDKey 只狼影逝二度 Sekiro: Sh...
steam 女神异闻录5皇家版 国区激活码CDKey P5R 女神异闻...
吉竹伸介这是苹果吗也许是吧系列全套4册 好无聊啊好无聊+后来呢后来怎了...
steam 三国志14 威力加强版套装 国区激活码CDKEY PC游戏...
umisky优美世界商场同款夏季款高腰绣花气质a字半身裙SG2H102...
PC中文正版steam 双点医院 Two Point Hospital...
PC游戏正版中文Steam 明星志愿1 stardom 国区激活码...
PC中文steam游戏 鬼泣5 五 国区激活码 cdkey Devil...
Steam游戏正版PC中文游戏 群星 复仇女神DLC Stellari...
Steam正版PC中文游戏 零 月蚀的假面 国区激活码CDKey FA...
新手易学 中文版Photoshop cs5数码照片处理 华诚科技 编著...
班尼兔冰激凌机家用小型迷你全自动甜筒机雪糕机自制冰淇淋机器...