下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 编程语言 >C/C++ > 嗨翻C语言

嗨翻C语言

综合评级:★★★★★

定价:99.00

作者:[美]David Griffiths Dawn Griffiths 著

出版社:人民邮电出版社

出版日期:2013年9月

页数:288

字数:781

ISBN:9787115318848

书籍介绍

《嗨翻C语言》向读者提供了C语言的完整学习体验。全书分为三个部分:第1章到第4章是基础知识,包括基本语法、指针、字符串、小工具与源文件;第5章到第8章为进阶内容,有结构、联合、数据结构、堆、函数指针、动/静态链接;最后四章是高级主题,内容涵盖了系统调用、进程间通信、网络编程和多线程。每部分结束后还有一个有趣的实验,可以提高读者的实际操作能力。此外,书中还包含大量的图片、示例和代码,有助于读者对于知识的理解和把握。   《嗨翻C语言》适用于C开发人员以及对C语言感兴趣的初学者。

相关课程
目录

目 录

引子

  让大脑重视C语言。现在你正试着学习某些东西,为了不让学习卡壳,你的大脑也在帮你的忙,大脑在想:“最好把空间留给重要的事,比如什么动物是危险的?裸体滑雪是不是一个坏主意?”那么怎么才能欺骗你的大脑,让它认为学好C关系到你下半生的幸福呢?

 本书为谁而写 xxxii

 我们知道你在想什么 xxxiii

 元认知 xxxv

 驯服你的大脑 xxxvii

 用户须知 xxxviii

 技术审校团队 xl

 致谢 xli

 

1 进入C语言的世界

  C语言入门

  想知道计算机在想什么?

  你需要为一款新游戏编写高性能的代码吗?你需要为Arduino编程吗?你需要在iPhone应用中使用高级的第三方库吗?如果是的话,C语言就可以帮上忙了。相比其他大多数语言,C语言的工作层次更低,因此理解C语言可以让你更清楚程序在运行时到底发生了什么,C语言还可以帮助你更好地理解其他语言。来吧,拿起编译器,很快你就能入门了。

 C语言用来创建空间小、速度快的程序 2

 完整的C程序长啥样? 5

 如何运行程序? 9

 两类命令 14

 到目前为止的代码 15

 用C语言算牌? 17

 布尔运算 18

 现在的代码 25

 随时转向的命运列车 26

 有时一次还不够…… 29

 所有循环的结构都相同…… 30

 用break语句退出循环…… 31

 C语言工具箱 40

 

2 存储器和指针

  指向何方?

  如果真的想玩转C语言,就需要理解C语言如何操纵存储器。

  C语言在如何使用存储器方面赋予了你更多的掌控权。在本章中,你将揭开存储器神秘的面纱,看到读写变量时到底发生了什么;学习数组的工作原理,以及怎样避免烦人的存储器错误;最重要的是,你将看到掌握指针和存储器寻址对成为一名地道的C程序员来讲有多么重要。

 C代码包含指针 42

 深入挖掘存储器 43

 和指针起航 44

 试着传递指向变量的指针 47

 使用存储器指针 48

 怎么把字符串传给函数? 53

 数组变量好比指针…… 54

 运行代码时,计算机在想什么 55

 数组变量与指针又不完全相同 59

 为什么数组从0开始 61

 为什么指针有类型 62

 用指针输入数据 65

 使用scanf()时要小心 66

 除了scanf()还可以用fgets() 67

 字符串字面值不能更新 72

 如果想修改字符串,就复制它 74

 把存储器保存在大脑里 80

 C语言工具箱 81

 

2.5 字符串

  字符串原理

  字符串不只是用来读取的。

  在C语言中字符串其实就是char数组,这你已经知道了,问题是字符串能用来干嘛?该string.h出场了。string.h是C标准库的一员,它负责处理字符串。如果想要连接、比较或复制字符串,string.h中的函数就可以派上用场了。在本章中,你将学会如何创建字符串数组,并近距离观察如何使用strstr()函数搜索字符串。

 不顾一切找Frank 84

 创建数组的数组 85

 找到包含搜索文本的字符串 86

 使用strstr()函数 89

 该审查代码了 94

 “数组的数组”和“指针的数组” 98

 C语言工具箱 101

 

3 创建小工具

  做一件事并把它做好

  操作系统都有小工具。

  C语言小工具执行特定的小任务,例如读写文件、过滤数据。如果想要完成更复杂的任务,可以把多个工具链接在一起。那么如何构建小工具呢?本章

中,你会看到创建小工具的基本要素并学会控制命令行选项、操纵信息流、重定向,并很快建立自己的工具。

 小工具可以解决大问题 104

 程序如何工作 108

 但没有使用文件…… 109

 可以用重定向 110

 隆重推出标准错误 120

 默认情况下,标准错误会发送到显示器 121

 fprintf()打印到数据流 122

 用fprintf()修改代码吧 123

 灵活的小工具 128

 切莫修改geo2json工具 129

 一个任务对应一个工具 130

 用管道连接输入与输出 131

 bermuda工具 132

 输出多个文件 137

 创建自己的数据流 138

 main()可以做得更多 141

 由库代劳 149

 C语言工具箱 156

 

4 使用多个源文件

  分而治之

  大程序不等于大源文件。

  你能想象一个企业级的程序如果只有一个源文件,维护起来有多么困难与耗时吗?在本章中,你将学习怎样把源代码分解为易于管理的小模块,然后把它们合成一个大程序,同时还将了解数据类型的更多细节,并结识一个新朋友:make。

 简明数据类型指南 162

 勿以小杯盛大物 163

 使用类型转换把float值存进整型变量 164

 不好啦,兼职演员来了…… 168

 代码到底怎么了 169

 编译器不喜欢惊喜 171

 声明与定义分离 173

 创建第一个头文件 174

 如果有共同特性…… 182

 把代码分成多个文件 183

 编译的幕后花絮 184

 共享代码需要自己的头文件 186

 又不是造火箭……还真是! 189

 不要重新编译所有文件 190

 首先,把源代码编译为目标文件 191

 记不住修改了哪些文件 196

 用make工具自动化构建 198

 make是如何工作的 199

 用makefile向make描述代码 200

 火箭升空! 205

 C语言工具箱 206

 

5 结构、联合与位字段

  创建自己的结构

  生活可比数字复杂多了。

  到目前为止,你只接触过C语言的基本数据类型,但如果想表示数字、文本以外的其他东西呢,或为现实世界中的事物建立模型,怎么办?结构将帮你创建自己的结构,模拟现实世界中错综复杂的事物。在本章中,你将学习如何把基本数据类型组成结构以及用联合处理生活的不确定性。如果你想简单地模拟“是”或“非”,可以用位字段。

 有时要传很多数据 218

 窃窃私语 219

 用结构创建结构化数据类型 220

 只要把“鱼”给函数就行了 221

 使用“.”运算符读取结构字段 222

 结构中的结构 227

 如何更新结构 236

 代码克隆了乌龟 238

 你需要结构指针 239

 (*t).age和*t.age 240

 同一类事物,不同数据类型 246

 联合可以有效使用存储器空间 247

 如何使用联合 248

 枚举变量保存符号 255

 有时你想控制某一位 261

 位字段的位数可调 262

 C语言工具箱 266

 

6 数据结构与动态存储

  牵线搭桥

  一个结构根本不够。

  为了模拟复杂的数据需求,通常需要把结构链接在一起。在本章中,你将学习如何用结构指针把自定义数据类型连接成复杂的大型数据结构,将通过创建链表来探索其中的基本原理;同时还将通过在堆上动态地分配空间来学习如何让数据结构处理可变数量的数据,并在完成工作后释放空间;如果你嫌清理工作太麻烦,可以学习一下怎么用valgrind。

 保存可变数量的数据 268

 链表就是一连串的数据 269

 在链表中插入数据 270

 创建递归结构 271

 用C语言创建岛屿…… 272

 在链表中插入值 273

 用堆进行动态存储 278

 有用有还 279

 用malloc()申请存储器…… 280

 用strdup()修复代码 286

 用完后释放存储器 290

 SPIES系统综述 300

 软件取证:使用valgrind 302

 反复使用valgrind,收集更多证据 303

 推敲证据 304

 最终审判 307

 C语言工具箱 309

 

7 高级函数

  发挥函数的极限

  基本函数很好用,但有时需要更多功能。

  到目前为止,你只关注了一些基本的东西,为了达成目标,需要更多的功能与灵活性。本章你将学习如何把函数作为参数传递,从而提高代码的智商,

并学会用比较器函数排序,最后还将学会使用可变参数函数让代码伸缩自如。

 寻找真命天子…… 312

 把代码传给函数 316

 把函数名告诉find() 317

 函数名是指向函数的指针…… 318

 ……没有函数类型 319

 如何创建函数指针 320

 用C标准库排序 325

 用函数指针设置顺序 326

 分手信自动生成器 334

 创建函数指针数组 338

 让函数能伸能缩 343

 C语言工具箱 350

 

8 静态库与动态库

  热插拔代码

  你已经见识过标准库的威力。

  是时候在代码中发挥这种威力了。在本章中,你将学会创建自己的库,以及在多个程序中复用相同代码;还将掌握编程大师的秘诀——通过动态库在运行时共享代码;最后你将写出易于扩展并可以有效管理的代码。

 值得信赖的代码 352

 尖括号代表标准头文件 354

 如何共享代码? 355

 共享.h头文件 356

 用完整路径名共享.o目标文件 357

 存档中包含多个.o文件 358

 用ar命令创建存档 359

 最后编译其他程序 360

 Head First健身房全球化战略 365

 计算卡路里 366

 事情可没那么简单…… 369

 程序由碎片组成…… 370

 在运行时动态链接 372

 .a能在运行时链接吗? 373

 首先,创建目标文件 374

 一种平台一个叫法 375

 C语言工具箱 387

 

9 进程与系统调用

  打破疆界

  打破常规。

  你已经学会了通过在命令行连接小工具的方式建立复杂的程序。但如果你想在代码中使用其他程序怎么办?本章中你将学会如何用系统服务来创建和控

制进程,让程序发电子邮件、上网和使用任何已经安装过的程序。本章的最后,你将得到超越C语言的力量。

 操作系统热线电话 398

 黑客入侵了…… 402

 岂止是安全问题 403

 exec()给你更多控制权 404

 exec()函数有很多 405

 数组函数:execv()、execvp()、execve() 406

 传递环境变量 407

 大多数系统调用以相同方式出错 408

 用RSS读新闻 416

 exec()是程序中最后一行代码 420

 用fork()+exec()运行子进程 421

 C语言工具箱 427

 

10 进程间通信

  沟通的艺术

  创建进程只是个开始。

  如果你想控制运行中的进程,向进程发送数据或读取它的输出,该怎么办?通过进程间通信,进程可以合力完成某件工作。我们将向你展示如何让程序与系统中其他程序通信,从而提升它的战斗力。

 输入输出重定向 430

 进程内部一瞥 431

 重定向即替换数据流 432

 fileno()返回描述符号 433

 有时需要等待…… 438

 家书抵万金 442

 用管道连接进程 443

 案例研究:在浏览器中打开新闻 444

 子进程 445

 父进程 445

 在浏览器中打开网页 446

 进程之死 451

 捕捉信号然后运行自己的代码 452

 用sigaction()来注册sigaction 453

 使用信号处理器 454

 用kill发送信号 457

 打电话叫程序起床 458

 C语言工具箱 466

 

11 网络与套接字

  金窝,银窝,不如127.0.0.1的草窝

  不同计算机上的程序需要对话。

  你已经学习了怎么用I/O与文件通信,还学习了如何让同一台计算机上的两个进程通信,现在你将走向世界舞台,让C程序通过互联网和世界各地的其他程序通信。本章的最后你将创建具有服务器和客户端功能的程序。

 互联网knock-knock服务器 468

 knock-knock服务器概述 469

 BLAB:服务器连接网络四部曲 470

 套接字不是传统意义上的数据流 472

 服务器有时不能正常启动 476

 妈妈说要检查错误 477

 从客户端读取数据 478

 一次只能服务一个人 485

 为每个客户端fork()一个子进程 486

 自己动手写网络客户端 490

 主动权在客户端手中 491

 创建IP地址套接字 492

 getaddrinfo()获取域名的地址 493

 C语言工具箱 500

 

12 线程

  平行世界

  程序经常需要同时做几件事。

  POSIX线程可以派生几段并行执行的代码,从而提高代码的响应速度。但是要小心!线程虽然很强大,但它们之间可能发生冲突。本章你将学习如何用红绿灯来防止代码发生车祸。最终你将学会创建POSIX线程,并使用同步机制来保护共享数据的安全。

 任务是串行的……还是…… 502

 ……进程不是唯一答案 503

 普通进程一次只做一件事 504

 多雇几名员工:使用线程 505

 如何创建线程? 506

 用pthread_create创建线程 507

 线程不安全 512

 增设红绿灯 513

 用互斥锁来管理交通 514

C 语言工具箱 521

 

i 饭后甜点

  十大遗漏知识点

  革命尚未成功,同志还需努力。

  我们认为你还需要知道一些事,如果不讲,总觉得哪里不对劲,但我们又不希望这本书重得只有大力士才提得动,所以我们只做简单介绍。在你放下这本书前,尽情地享用这些“美味佳肴”吧。

 #1. 运算符 540

 #2. 预处理指令 542

 #3. static关键字 543

 #4. 数据类型的大小 544

 #5. 自动化测试 545

 #6. 再谈gcc 546

 #7. 再谈make 548

 #8. 开发工具 550

 #9. 创建GUI 551

 #10. 参考资料 552

 

ii 话题汇总

  总复习

  将C语言的特性尽收眼底。

  我们把本书中出现过的所有关于C语言的话题和原理都汇总在了这里。把它们过一遍,看你还记得多少。每条话题都标明了来源章节号。如果你想不起来,很容易就能找到原文,甚至还可以把它们剪下来贴在墙上。

热门图书
推荐新闻
技术文库
论坛推荐