linux一站学习,Linux C编程一站式学习 目录

目    录

上篇  C语言入门

第1章  程序的基本概念 2

1.1  程序和编程语言 2

1.2  自然语言和形式语言 6

1.3  程序的调试 7

1.4  ***个程序 9

第2章  常量、变量和表达式 12

2.1  继续Hello World 12

2.2  常量 15

2.3  变量 16

2.4  赋值 18

2.5  表达式 19

2.6  字符类型与字符编码 23

第3章  简单函数 24

3.1  数学函数 24

3.2  自定义函数 26

3.3  形参和实参 31

3.4  全局变量、局部变量和作用域 35

第4章  分支语句 41

4.1  if语句 41

4.2  if/else语句 43

4.3  布尔代数 45

4.4  switch语句 49

第5章  深入理解函数 51

5.1  return语句 51

5.2  增量式开发 54

5.3  递归 58

第6章  循环语句 64

6.1  while语句 64

6.2  do/while语句 66

6.3  for语句 67

6.4  break和continue语句 69

6.5  嵌套循环 70

6.6  goto语句和标号 71

第7章  结构体 74

7.1  复合类型与结构体 74

7.2  数据抽象 78

7.3  数据类型标志 82

7.4  嵌套结构体 84

第8章  数组 85

8.1  数组的基本概念 85

8.2  数组应用实例:统计随机数 88

8.3  数组应用实例:直方图 91

8.4  字符串 94

8.5  多维数组 95

第9章  编码风格 100

9.1  缩进和空白 100

9.2  注释 104

9.3  标识符命名 107

9.4  函数 108

9.5  indent工具 108

第10章  gdb 110

10.1  单步执行和跟踪函数调用 110

10.2  断点 117

10.3  观察点 121

10.4  段错误 125

第11章  排序与查找 128

11.1  算法的概念 128

11.2  插入排序 129

11.3  算法的时间复杂度分析 131

11.4  归并排序 133

11.5  线性查找 138

11.6  折半查找 139

第12章  栈与队列 144

12.1  数据结构的概念 144

12.2  堆栈 144

12.3  深度优先搜索 146

12.4  队列与广度优先搜索 152

12.5  环形队列 156

本阶段总结 159

下篇  C语言本质

第13章  计算机中数的表示 162

13.1  为什么计算机用二进制计数 162

13.2  不同进制之间的换算 164

13.3  整数的加减运算 165

13.3.1  Sign and Magnitude表示法 165

13.3.2  1's Complement表示法 166

13.3.3  2's Complement表示法 167

13.3.4  有符号数和无符号数 168

13.4  浮点数 169

第14章  数据类型详解 172

14.1  整型 172

14.2  浮点型 176

14.3  类型转换 177

14.3.1  Integer Promotion 177

14.3.2  Usual Arithmetic Conversion 178

14.3.3  由赋值产生的类型转换 179

14.3.4  强制类型转换 179

14.3.5  编译器如何处理类型转换 179

第15章  运算符详解 182

15.1  位运算 182

15.1.1  按位与、或、异或、取反运算 182

15.1.2  移位运算 183

15.1.3  掩码 184

15.1.4  异或运算的一些特性 185

15.2  其他运算符 186

15.2.1  复合赋值运算符 186

15.2.2  条件运算符 186

15.2.3  逗号运算符 187

15.2.4  sizeof运算符与typedef类型声明 187

15.3  Side Effect与Sequence Point 189

15.4  运算符总结 191

第16章  计算机体系结构基础 193

16.1  内存与地址 193

16.2  CPU 193

16.3  设备 196

16.4  MMU 198

16.5  Memory Hierarchy 201

第17章  x86汇编程序基础 205

17.1  最简单的汇编程序 205

17.2  x86的寄存器 208

17.3  第二个汇编程序 209

17.4  寻址方式 211

17.5  ELF文件 212

17.5.1  目标文件 213

17.5.2  可执行文件 218

第18章  汇编与C之间的关系 224

18.1  函数调用 224

18.2  main函数、启动例程和退出状态 230

18.3  变量的存储布局 237

18.4  结构体和联合体 244

18.5  C内联汇编 248

18.6  volatile限定符 250

第19章  链接详解 255

19.1  多目标文件的链接 255

19.2  定义和声明 260

19.2.1  extern和static关键字 260

19.2.2  头文件 264

19.2.3  定义和声明的详细规则 268

19.3  静态库 271

19.4  共享库 274

19.4.1  编译、链接、运行 274

19.4.2  函数的动态链接过程 281

19.4.3  共享库的命名惯例 282

19.5  虚拟内存管理 284

第20章  预处理 290

20.1  预处理的步骤 290

20.2  宏定义 291

20.2.1  函数式宏定义 291

20.2.2  内联函数 294

20.2.3  #、##运算符和可变参数 296

20.2.4  #undef预处理指示 298

20.2.5  宏展开的步骤 299

20.3  条件预处理指示 300

20.4  其他预处理特性 303

第21章  Makefile基础 306

21.1  基本规则 306

21.2  隐含规则和模式规则 313

21.3  变量 317

21.4  自动处理头文件的依赖关系 321

21.5  常用的make命令行选项 324

第22章  指针 327

22.1  指针的基本概念 327

22.2  指针类型的参数和返回值 331

22.3  指针与数组 332

22.4  指针与const限定符 335

22.5  指针与结构体 337

22.6  指向指针的指针与指针数组 337

22.7  指向数组的指针与多维数组 340

22.8  函数类型和函数指针类型 341

22.9  不完全类型和复杂声明 344

第23章  函数接口 349

23.1  本章的预备知识 349

23.1.1  strcpy与strncpy 349

23.1.2  malloc与free 354

23.2  传入参数与传出参数 358

23.3  两层指针的参数 360

23.4  返回值是指针的情况 362

23.5  回调函数 365

23.6  可变参数 368

第24章  C标准库 372

24.1  字符串操作函数 373

24.1.1  给字符串赋初值 373

24.1.2  取字符串的长度 374

24.1.3  拷贝字符串 375

24.1.4  连接字符串 377

24.1.5  比较字符串 378

24.1.6  搜索字符串 379

24.1.7  分割字符串 380

24.2  标准I/O库函数 383

24.2.1  文件的基本概念 383

24.2.2  fopen/fclose 384

24.2.3  stdin/stdout/stderr 387

24.2.4  errno与perror/strerror函数 388

24.2.5  以字节为单位的I/O函数 391

24.2.6  操作读写位置的函数 393

24.2.7  以字符串为单位的I/O函数 395

24.2.8  以记录为单位的I/O函数 397

24.2.9  格式化I/O函数 399

24.2.10  C标准库的I/O缓冲区 406

24.2.11  本节综合练习 410

24.3  数值字符串转换函数 412

24.4  分配内存的函数 414

第25章  链表、二叉树和哈希表 415

25.1  链表 415

25.1.1  单链表 415

25.1.2  双向链表 421

25.1.3  静态链表 425

25.1.4  本节综合练习 426

25.2  二叉树 426

25.2.1  二叉树的基本概念 426

25.2.2  排序二叉树 432

25.3  哈希表 437

本阶段总结 439

附录A  字符编码 442

索引 449

参考书目 474

【责任编辑:董书 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网上很多地方可以找到本书的下载,我唯一能够额外贡献的是,提供多格式的打包下载,包括:PDF格式,离线网页格式,在线网页格式。 如果您觉得下载比较麻烦,那么建议您直接使用在线教程,网址是:http://learn.akae.cn/media/index.html 如果您只需要一个可以打印的PDF格式文件,那么建议你下载Defonds的资源,因为我的PDF格式文件就是从他那下的,资源链接是:http://download.csdn.net/detail/defonds/2855361 如果您和我一样,希望在多种环境下都可以方便地使用本书,那么欢迎您下载我提供的这个打包资源! 对本书的描述 版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心 这本书最初是为北京亚嵌教育研究中心的嵌入式Linux系统工程师就业班课程量身定做的教材之一,作者宋劲松。 这是一本从零基础开始学习编程的书,不要求读者有任何编程经验,但读者应勤于思考。本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只需从前到后按顺序学习即可。但一站式学习并不等于傻瓜式学习,有些章节有一定的难度,需要积极思考才能领会。本书可以替你节省时间,但不能替你思考,不要指望像看小说一样走马观花看一遍就能学会。 本书不是孤立地讲C语言,而是和编译原理、操作系统、计算机体系结构结合起来讲。或者说,本书的内容只是以C语言为载体,真正讲的是计算机的原理和程序的原理。 强调基本概念和基本原理,在编排顺序上非常重视概念之间的依赖关系,每次引入一个新的概念,只依赖于前面章节已经讲过的概念,而绝不会依赖后面章节要讲的概念。有些地方为了叙述得完整,也会引用后面要讲的内容,比如说“有关XX我们到XX章再仔细讲解”,凡是这种引用都不是必要的依赖,可以当它不存在,只管继续往下看就行了。 这本书定位在入门级,虽然内容很多,但不是一本百科全书,除了C语言基本要讲透之外其它内容都不深入,书中列出了很多参考资料,是读者进一步学习的起点。K&R的第一章是一个Whirlwind Tour,把全书的内容简单过了一遍,然后再逐个深入进去讲解。本书也可以看作是计算机专业课程体系的一个Whirlwind Tour,学习完本书之后有了一个全局观,再去学习那些参考资料就应该很容易上手了。 本书的主要内容包括三大部分: C语言入门。介绍基本的C语法,帮助没有任何编程经验的读者理解什么是程序,怎么写程序,培养程序员的思维习惯,找到编程的感觉。前半部分改编自《How To Think Like A Computer Scientist: Learning with C++》(Allen B. Downey.) C语言本质。结合计算机和操作系统的原理讲解C程序是怎么编译、链接、运行的,同时全面介绍C的语法。位运算的章节改编自亚嵌教育林小竹老师的讲义,链表和二叉树的章节改编自亚嵌教育朱老师的讲义。汇编语言的章节改编自《Programming from the Ground Up: An Introduction to Programming using Linux Assembly Language》(Jonathan Bartlett.)在该书的最后一章提到,学习编程有两种Approach,一种是Bottom Up,一种是Top Down,各有优缺点,需要两者结合起来。所以作者编这本书的思路是,第一部分Top Down,第二部分Bottom Up,第三部分可以算填了中间的空隙,三部分全都围绕C语言展开。 Linux系统编程。介绍各种Linux系统函数和内核的工作原理。Socket编程的章节改编自亚嵌教育卫剑钒老师的讲义。 为什么要在Linux平台上学C语言?用Windows学C语言不好吗? 用Windows还真的是学不好C语言。C语言是一种面向底层的编程语言,要写好C程序,必须对操作系统的工作原理非常清楚,因为操作系统也是用C写的,我们用C写应用程序直接使用操作系统提供的接口。既然你选择了看这本书,你一定了解:Linux是一种开源的操作系统,你有任何疑问都可以从源代码和文档中找到答案,即使你看不懂源代码,也找不到文档,也很容易找个高手教你,各种邮件列表、新闻组和论坛上从来都不缺乐于助人的高手;而Windows是一种封闭的操作系统,除了微软的员工别人都看不到它的源代码,只能通过文档去猜测它的工作原理,更糟糕的是,微软向来喜欢藏着揶着,好用的功能留着自己用,而不会写到文档里公开。本书的第一部分在Linux或Windows平台上学习都可以,但第二部分和第三部分介绍了很多Linux操作系统的原理以帮助读者更深入地理解C语言,只能在Linux平台上学习。 Windows平台上的开发工具往往和各种集成开发环境(IDE,Integrated Development Environment)绑在一起,例如Visual Studio、Eclipse等。使用IDE确实很便捷,但IDE对于初学者绝对不是好东西。微软喜欢宣扬傻瓜式编程的理念,告诉你用鼠标拖几个控件,然后点一个按钮就可以编译出程序来,但是真正有用的程序有哪个是这么拖出来的?很多从Windows平台入门学编程的人,编了好几年程序,还是只知道编完程序点一个按钮就可以跑了,把几个源文件拖到一个项目里就可以编译到一起了,如果有更复杂的需求他们就傻眼了,因为他们脑子里只有按钮、菜单的概念,根本没有编译器、链接器、Makefile的概念,甚至连命令行都没用过,然而这些都是初学编程就应该建立起来的基本概念。另一方面,编译器、链接器和C语言的语法有密切的关系,不了解编译器、链接器的工作原理,也不可能真正掌握C的语法。所以,IDE并没有帮助你学习,而是阻碍了你学习,本来要学好C编程只要把语法和编译命令学会就行了,现在有了IDE,除了学会语法和编译命令,你还得弄清楚编译命令和IDE是怎么集成的,这才算学明白了,本来就很复杂的学习任务被IDE搞得更加复杂了。Linux用户的使用习惯从来都是以敲命令为主,以鼠标操作为辅,从学编程的第一天起就要敲命令编译程序,等到你把这些基本概念都搞清楚了,你觉得哪个IDE好用你再去用,不过到那时候你可能会更喜欢vi或emacs而不是IDE了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值