想用C代码编写好玩的游戏吗?想成为C代码侦探,去破解重重谜案吗?或是让C代码变成牵线红娘,帮你找到你的梦中情人?哈哈!别着急,David Griffiths和Dawn Griffiths夫妇的这本Head First C将会带你来到这个奇妙的C语言世界:这里没有令人乏味的“学究腔”,没有冗长枯燥的老生常谈,也没有令人望而却步的大堆练习。作者用诙谐、幽默的口吻为你讲述了一个又一个关于C的故事。无论你是C语言学习航程中的新船员,还是经历过大风大浪的老水手,你都能从Head First C中体会到无限乐趣。
售 价:¥
纸质售价:¥78.20购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
扉页
版权页
O'Reilly Media, Inc. 介绍
《嗨翻C语言》的作者
译者序
目录
引子
1 C语言入门 进入C语言的世界
C语言用来创建空间小、速度快的程序
完整的C程序长啥样?
如何运行程序?
两类命令
到目前为止的代码
用C语言算牌?
布尔运算
现在的代码
随时转向的命运列车
有时一次还不够……
所有循环的结构都相同……
用break语句退出循环……
C语言工具箱
2 存储器和指针 指向何方?
C代码包含指针
深入挖掘存储器
和指针起航
试着传递指向变量的指针
使用存储器指针
怎么把字符串传给函数?
数组变量好比指针……
运行代码时,计算机在想什么
数组变量与指针又不完全相同
为什么数组从0开始
为什么指针有类型
用指针输入数据
使用scanf()时要小心
除了scanf()还可以用fgets()
字符串字面值不能更新
如果想修改字符串,就复制它
把存储器保存在大脑里
C语言工具箱
2.5 字符串 字符串原理
不顾一切找Frank
创建数组的数组
找到包含搜索文本的字符串
使用strstr()函数
该审查代码了
“数组的数组”和“指针的数组”
C语言工具箱
3 创建小工具 做一件事并把它做好
小工具可以解决大问题
程序如何工作
但没有使用文件……
可以用重定向
隆重推出标准错误
默认情况下,标准错误会发送到显示器
fprintf()打印到数据流
用fprintf()修改代码吧
灵活的小工具
切莫修改geo2json工具
一个任务对应一个工具
用管道连接输入与输出
bermuda工具
输出多个文件
创建自己的数据流
main()可以做得更多
由库代劳
C语言工具箱
4 使用多个源文件 分而治之
简明数据类型指南
勿以小杯盛大物
使用类型转换把float值存进整型变量
不好啦,兼职演员来了……
代码到底怎么了
编译器不喜欢惊喜
声明与定义分离
创建第一个头文件
如果有共同特性……
把代码分成多个文件
编译的幕后花絮
共享代码需要自己的头文件
又不是造火箭……还真是!
不要重新编译所有文件
首先,把源代码编译为目标文件
记不住修改了哪些文件
用make工具自动化构建
make是如何工作的
用makefile向make描述代码
火箭升空!
C语言工具箱
5 结构、联合与位字段 创建自己的结构
有时要传很多数据
窃窃私语
用结构创建结构化数据类型
只要把“鱼”给函数就行了
使用“.”运算符读取结构字段
结构中的结构
如何更新结构
代码克隆了乌龟
你需要结构指针
(*t).age和*t.age
同一类事物,不同数据类型
联合可以有效使用存储器空间
如何使用联合
枚举变量保存符号
有时你想控制某一位
位字段的位数可调
C语言工具箱
6 数据结构与动态存储 牵线搭桥
保存可变数量的数据
链表就是一连串的数据
在链表中插入数据
创建递归结构
用C语言创建岛屿……
在链表中插入值
用堆进行动态存储
有用有还
用malloc()申请存储器……
用strdup()修复代码
用完后释放存储器
SPIES系统综述
软件取证:使用valgrind
反复使用valgrind,收集更多证据
推敲证据
最终审判
C语言工具箱
7 高级函数 发挥函数的极限
寻找真命天子……
把代码传给函数
把函数名告诉find()
函数名是指向函数的指针……
……没有函数类型
如何创建函数指针
用C标准库排序
用函数指针设置顺序
分手信自动生成器
创建函数指针数组
让函数能伸能缩
C语言工具箱
8 静态库与动态库 热插拔代码
值得信赖的代码
尖括号代表标准头文件
如何共享代码?
共享.h头文件
用完整路径名共享.o目标文件
存档中包含多个.o文件
用ar命令创建存档
最后编译其他程序
Head First健身房全球化战略
计算卡路里
事情可没那么简单……
程序由碎片组成……
在运行时动态链接
.a能在运行时链接吗?
首先,创建目标文件
一种平台一个叫法
C语言工具箱
9 进程与系统调用 打破疆界
操作系统热线电话
黑客入侵了……
岂止是安全问题
exec()给你更多控制权
exec()函数有很多
数组函数:execv()、execvp()、execve()
传递环境变量
大多数系统调用以相同方式出错
用RSS读新闻
exec()是程序中最后一行代码
用fork()+exec()运行子进程
C语言工具箱
10 进程间通信 沟通的艺术
输入输出重定向
进程内部一瞥
重定向即替换数据流
fileno()返回描述符号
有时需要等待……
家书抵万金
用管道连接进程
案例研究:在浏览器中打开新闻
子进程
父进程
在浏览器中打开网页
进程之死
捕捉信号然后运行自己的代码
用sigaction()来注册sigaction
使用信号处理器
用kill发送信号
打电话叫程序起床
C语言工具箱
11 网络与套接字 金窝,银窝,不如127.0.0.1的草窝
互联网knock-knock服务器
knock-knock服务器概述
BLAB:服务器连接网络四部曲
套接字不是传统意义上的数据流
服务器有时不能正常启动
妈妈说要检查错误
从客户端读取数据
一次只能服务一个人
为每个客户端fork()一个子进程
自己动手写网络客户端
主动权在客户端手中
创建IP地址套接字
getaddrinfo()获取域名的地址
C语言工具箱
12 线程 平行世界
任务是串行的……还是……
……进程不是唯一答案
普通进程一次只做一件事
多雇几名员工:使用线程
如何创建线程?
用pthread_create创建线程
线程不安全
增设红绿灯
用互斥锁来管理交通
C 语言工具箱
i 饭后甜点 十大遗漏知识点
#1.运算符
#2.预处理指令
#3.static关键字
#4.数据类型的大小
#5.自动化测试
#6.再谈gcc
#7.再谈make
#8.开发工具
#9.创建GUI
#10.参考资料
ii 话题汇总 总复习
索引
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜