注重体验与质量的电子书资源下载网站
分类于: 其它
简介
嗨翻C语言 豆 9.2分
资源最后更新于 2020-03-20 17:45:33
作者:https://itpanda.net/book/20/download/19
译者:程亦超
出版社:出版社人民邮电出版社
出版日期:2013-09
文件格式: pdf
简介· · · · · ·
本书向读者提供了C语言的完整学习体验。全书分为三个部分:第1章到第4章是基础知识,包括基本语法、指针、字符串、小工具与源文件;第5章到第8章为进阶内容,有结构、联合、数据结构、堆、函数指针、动/静态链接;最后四章是高级主题,内容涵盖了系统调用、进程间通信、网络编程和多线程。每部分结束后还有一个有趣的实验,可以提高读者的实际操作能力。此外,书中还包含大量的图片、示例和代码,有助于读者对于知识的理解和把握。本书适用于C开发人员以及对C语言感兴趣的初学者。David Griffiths,12岁时看到一部介绍Seymour Papert工作的纪录片,从此踏上编程之路。15岁那年实现了Papert的LOGO编程语言。大学专业是理论数学,毕业后开始编程,并成为一名专栏作家。现在有三个头衔:敏捷教练、程序员和车库管理员。Dawn Griffiths,在英国一所顶尖的大学开始了她的数学生涯,获得了数学系的荣誉学位,毕业以后投身软件开发行业,迄今已经有15年的IT行业从业经验。在和David一起写《嗨翻C语言》之前,Dawn写过两本Head First系列的书(《深入浅出统计学》和Head First 2D Geometry),同时还主持过该系列其他几本书。
目录
O'Reilly Media, Inc.介绍
业界评论
献辞
对Head First丛书的赞誉
对本书的赞誉
《嗨翻C语言》的作者
译者序
其他图书
O'Reilly的其他相关图书
O'Reilly Head First系列的其他图书
引子
本书为谁而写
谁与本书无缘?
我们知道你在想什么
我们也知道你的大脑在想什么
我们将Head First的读者视为学习者。
元认知:思考的思考
我们做了什么
驯服你的大脑
用户须知
技术审校团队
致谢
Safari®在线图书
1 C语言入门:进入C语言的世界
C语言用来创建空间小、速度快的程序
C语言的工作方式
完整的C程序长啥样?
如何运行程序?
程序工作了!
别在字符串的尽头掉下去
两类命令
做事情
只有条件为真才去做事情
到目前为止的代码
用C语言算牌?
布尔运算
&&检查两个条件都为真
||检查两个条件中只要有一个为真
!把条件的值反过来
现在的代码
随时转向的命运列车
有时一次还不够……
在C语言中使用while循环
所有循环的结构都相同……
……for循环让事情变得更简单
用break语句退出循环……
……用 continue 继续循环
C语言工具箱
2 存储器和指针
C代码包含指针
深入挖掘存储器
和指针起航
船长,向东航行!
C语言按值传递参数
试着传递指向变量的指针
指针让存储器易于共享
使用存储器指针
怎么把字符串传给函数?
亲爱的,谁截了我们的字符串?
数组变量好比指针……
……所以传给函数的是指针
运行代码时,计算机在想什么
数组变量与指针又不完全相同
致命处方案件
为什么数组从0开始
为什么指针有类型
致命处方案件
用指针输入数据
用scanf()输入数字
使用scanf()时要小心
scanf()会导致缓冲区溢出
除了scanf()还可以用fgets()
fgets()配合sizeof一起使用
三猜一
哎呀……存储器故障……
字符串字面值不能更新
如果想修改字符串,就复制它
神奇子弹案件
神奇子弹案件
把存储器保存在大脑里
C语言工具箱
2.5 字符串
不顾一切找Frank
创建数组的数组
找到包含搜索文本的字符串
使用string.h
使用strstr()函数
该审查代码了
“数组的数组”和“指针的数组”
C语言工具箱
3 创建小工具
小工具可以解决大问题
程序如何工作
但没有使用文件……
可以用重定向
可以用 < 重定向标准输入……
用 > 重定向标准输出
一些数据出错了……
代码拆析
隆重推出标准错误
默认情况下,标准错误会发送到显示器
fprintf()打印到数据流
用fprintf()修改代码吧
最高机密
最高机密解答
灵活的小工具
切莫修改geo2json工具
做一件事并把它做好
一个任务对应一个工具
用管道连接输入与输出
bermuda工具
输出多个文件
创建自己的数据流
程序运行了,但是……
main()可以做得更多
Head First披萨屋耳闻
由库代劳
C语言工具箱
4 使用多个源文件
简明数据类型指南
勿以小杯盛大物
使用类型转换把float值存进整型变量
不好啦,兼职演员来了……
代码到底怎么了
编译器不喜欢惊喜
调整函数的顺序很痛苦
在某些场景中,没有正确的顺序
声明与定义分离
创建第一个头文件
如果有共同特性……
……最好可以共享代码
把代码分成多个文件
编译的幕后花絮
共享代码需要自己的头文件
在程序中包含encrypt.h
又不是造火箭……还真是!
不要重新编译所有文件
保存目标代码的副本
首先,把源代码编译为目标文件
然后,把目标文件链接起来
记不住修改了哪些文件
用make工具自动化构建
make需要知道什么?
make是如何工作的
用makefile向make描述代码
火箭升空!
C语言工具箱
C语言实验室1:Arduino
说明书:让盆栽说话
物理设备
Arduino
Arduino IDE
装配物理设备
制作湿度传感器
连接LED
连接湿度传感器
代码应该做
读取湿度传感器的数据
把数据写到LED
向串口写数据
C代码怎么写
几个有用的Arduino函数
植物监控仪下线
如果你有Mac,并且想让你的植物开口说话,可以到Head First实验室网站下载一个脚本,它可以识别串行数据流,并大声地朗读出来:
www.headfirstlabs.com/books/hfc
5 结构、联合与位字段
有时要传很多数据
窃窃私语
用结构创建结构化数据类型
只要把“鱼”给函数就行了
使用“.”运算符读取结构字段
结构中的结构
如何更新结构
代码克隆了乌龟
你需要结构指针
(*t).age和*t.age
同一类事物,不同数据类型
联合可以有效使用存储器空间
如何使用联合
C89方式
指定初始化器
“点”表示法
联合常和结构一起用
枚举变量保存符号
有时你想控制某一位
位字段的位数可调
C语言工具箱
6 数据结构与动态存储
保存可变数量的数据
链表就是一连串的数据
在链表中插入数据
创建递归结构
用C语言创建岛屿……
……把它们链接在一起,构成飞行之旅
在链表中插入值
用堆进行动态存储
首先,用malloc()获取空间
有用有还
调用free()释放存储器
用malloc()申请存储器……
……用free()释放存储器
不好!兼职演员来了……
消失的岛屿案件
消失的岛屿案件
用strdup()修复代码
能改好吗?
用完后释放存储器
最高机密
物证一:源代码
SPIES系统综述
程序建立一棵嫌疑犯树
真聪明。有问题吗?
软件取证:使用valgrind
准备好代码:添加调试信息
真相只有一个:审问代码
反复使用valgrind,收集更多证据
这次valgrind发现了存储器泄漏
推敲证据
最终审判
泄漏已修复
C语言工具箱
7 高级函数
寻找真命天子……
把代码传给函数
把函数名告诉find()
函数名是指向函数的指针……
……没有函数类型
为什么C语言没有函数类型
如何创建函数指针
用C标准库排序
用函数指针设置顺序
分手信自动生成器
创建函数指针数组
如何用数组解决刚才的问题?
让函数能伸能缩
你的函数如何做到这点?
C语言工具箱
8 静态库与动态库
值得信赖的代码
尖括号代表标准头文件
如何共享代码?
共享.h头文件
用完整路径名共享.o目标文件
存档中包含多个.o文件
用ar命令创建存档
……在库目录下保存.a文件
最后编译其他程序
Head First健身房全球化战略
计算卡路里
事情可没那么简单……
程序由碎片组成……
……一旦链接,就不能改变。
在运行时动态链接
.a能在运行时链接吗?
动态库——加强版目标文件
首先,创建目标文件
一种平台一个叫法
编译elliptical程序
Mac
Linux
Windows
Cygwin
MinGW
C语言工具箱
C语言实验室2:OpenCV
说明书:入侵者检测器
入侵者检测器
OpenCV
安装OpenCV
代码应完成
获取输入
捕获图像
检测入侵者
全身而退
可选:显示当前画面
检测器下线
勇者之路
9 进程与系统调用
操作系统热线电话
黑客入侵了……
岂止是安全问题
exec()给你更多控制权
exec()函数替换当前进程
exec()函数有很多
列表函数:execl()、execlp()、execle()
数组函数:execv()、execvp()、execve()
传递环境变量
出错了怎么办?
大多数系统调用以相同方式出错
用RSS读新闻
exec()是程序中最后一行代码
用fork()克隆进程
用fork()+exec()运行子进程
C语言工具箱
10 进程间通信
输入输出重定向
进程内部一瞥
重定向即替换数据流
进程可以重定向自己
fileno()返回描述符号
dup2()复制数据流
还在为错误代码烦恼?
有时需要等待……
waitpid()函数
家书抵万金
从rssgossip读取新闻链接
用管道连接进程
管道两侧的命令是父子关系
案例研究:在浏览器中打开新闻
pipe()打开两条数据流
子进程
父进程
在浏览器中打开网页
进程之死
操作系统用信号控制程序
捕捉信号然后运行自己的代码
sigaction是一个函数包装器
处理器必须接收信号参数
用sigaction()来注册sigaction
使用信号处理器
用kill发送信号
用raise()发送信号
打电话叫程序起床
…定时器发出SIGALRM信号
测试一:按Ctrl-C
测试二:等5秒
C语言工具箱
11 网络与套接字
互联网knock-knock服务器
knock-knock服务器概述
BLAB:服务器连接网络四部曲
1. 绑定端口
2. 监听
3. 接受连接
套接字不是传统意义上的数据流
服务器有时不能正常启动
妈妈说要检查错误
绑定端口有延时
从客户端读取数据
一次只能服务一个人
为每个客户端fork()一个子进程
父子进程使用不同套接字
自己动手写网络客户端
主动权在客户端手中
远程端口和IP地址
创建IP地址套接字
getaddrinfo()获取域名的地址
创建域名套接字
C语言工具箱
12 线程
任务是串行的……还是……
……进程不是唯一答案
普通进程一次只做一件事
多雇几名员工:使用线程
如何创建线程?
用pthread_create创建线程
线程不安全
增设红绿灯
用互斥锁来管理交通
C语言工具箱
C语言实验室3:爆破彗星
经典街机游戏——爆破彗星
任务:闪避彗星并向它们开炮
Allegro
安装Allegro
你需要CMake
Allegro能做什么?
构建游戏
宇宙飞船
飞船的外形
碰撞
飞船行为
读取按键
炮弹
弹道
炮弹行为
彗星
彗星的外形
彗星
命中彗星
游戏状态
用“变换”移动物体
《爆破彗星》下线
出山……
送君千里终须一别!
i 饭后甜点
#1. 运算符
递增与递减
三目运算符
位运算
用逗号分割表达式
#2. 预处理指令
条件编译
#3. static关键字
用static定义私有变量或函数
#4. 数据类型的大小
#5. 自动化测试
#6. 再谈gcc
优化
警告
#7. 再谈make
变量
使用%、^和 @
隐式规则
#8. 开发工具
gdb
gprof
gcov
#9. 创建GUI
Linux——GTK
Windows
Mac——Carbon
#10. 参考资料
网站
ii 话题汇总
入门
存储器和指针
字符串
数据流
数据类型
多个文件
结构
联合和位字段
数据结构
动态存储
高级函数
静态库与动态库
进程间通信
网络与套接字
线程