新書推薦:
《
帕纳索传来的消息(文艺复兴译丛)
》
售價:NT$
495.0
《
DK威士忌大百科
》
售價:NT$
1340.0
《
小白学编织
》
售價:NT$
299.0
《
Android游戏开发从入门到精通 第2版 王玉芹
》
售價:NT$
495.0
《
西班牙内战:秩序崩溃与激荡的世界格局:1936-1939
》
售價:NT$
990.0
《
非对称创新:中国企业赶超战略 魏江 刘洋
》
售價:NT$
495.0
《
潜能觉醒
》
售價:NT$
395.0
《
初平:汉末群雄混战(190—195)
》
售價:NT$
245.0
|
編輯推薦: |
本书的主要内容和特色:
从C底层核心机制进行解析,避免滥用指针。
以编译生成的中间汇编码为剖析对象,针对C指针基础进行讲解,从汇编语言的角度理解C指针,力图使读者由一种简单的汇编语言理解复杂的C指针机制。
配合编程技巧以及某些指针运用技巧,阐明C指针的高级应用知识,灵活运用指针之间的组合,提高程序效能。
剖析了解释语言指针、TCC编译实践、垃圾回收等高级C指针应用话题。
|
內容簡介: |
全书分为准备篇、基础篇、揭秘篇、实战篇。本书力求从底层实现机制进行解析,同时配合CC++编程技巧以及某些指针运用技巧,讲解如何提高程序效能,如何避免滥用指针。
准备篇中介绍C指针概述、UBUNTU及开发环境配置、AT&T汇编简介、编译原理基础;基础篇将对AT&T汇编以及C指针基础进行介绍;揭秘篇讲述高级C指针的实现机制以及C++指针实现机制,同时讲解编程技巧和CC++指针高级应用;实战篇讲解解释语言指针、TCC编译实践、垃圾回收等高级C指针应用话题。
|
關於作者: |
刘兴笔名麦好,硕士学位,中国青年海归协会和中国量化投资学会山西分会成员,长期活跃于CSDN和ITEYE等社区,发表过多篇技术博客。
|
目錄:
|
前言
第一篇 准备篇
第1章 C语言概述2
1.1 C语言的起源与发展2
1.2 C语言特性3
1.3 开发环境搭建4
1.3.1 Windows开发环境4
1.3.2 UNIXLinux开发环境13
1.3.3 随书网盘的开发环境33
1.4 hello,world38
1.5 小结43
第2章 C语言快速入门44
2.1 C语言的语法特点44
2.2 猜数字游戏45
2.2.1 编写输入数字的C代码46
2.2.2 限制输入数字的范围46
2.2.3 引入循环机制,允许重新输入48
2.2.4 产生1~500以内的随机整数50
2.2.5 反复接收玩家输入,直到猜中数字为止52
2.2.6 自动猜数算法54
2.3 小结57
第3章 AT&T汇编概述58
3.1 AT&T汇编基础58
3.1.1 IA-32指令58
3.1.2 汇编的作用59
3.1.3 AT&T汇编语言的特点59
3.1.4 第一个AT&T汇编61
3.2 程序运行机制64
3.3 小结65
第二篇 基础篇
第4章 指针基础68
4.1 C指针概述68
4.2 C指针基础69
4.2.1 指向标量的C指针69
4.2.2 指向数组的C指针73
4.2.3 指针数组75
4.2.4 函数参数中使用指针82
4.2.5 常量指针85
4.2.6 函数指针88
4.2.7 文件指针91
4.3 小结98
第5章 C开发基础99
5.1 编译与调试C程序99
5.1.1 GCC与GDB99
5.1.2 make工具与makefile104
5.2 GLib函数库107
5.2.1 GLib简述107
5.2.2 GLib基础110
5.2.3 GLib数据类型及标准宏118
5.3 内存管理120
5.3.1 glibc的内存管理120
5.3.2 内存分配机制121
5.3.3 内存回收125
5.4 Ncurses库137
5.4.1 Ncurses简述137
5.4.2 Ncurses基础137
5.4.3 Ncurses实例:文字编辑器154
5.5 小结181
第三篇 进阶篇
第6章 C开发技巧集锦184
6.1 递归184
6.1.1 递归概述184
6.1.2 斐波那契数列184
6.1.3 brainfuck解释器186
6.2 字符串操作 196
6.2.1 复制并截断字符串196
6.2.2 字符串拼接197
6.2.3 在内存中复制字符串197
6.2.4 目录的尾部位置197
6.2.5 查找文件扩展名198
6.3 加法溢出198
6.3.1 溢出原理198
6.3.2 溢出应用199
6.4 编译信息的预定义宏200
6.4.1 __FILE__与__LINE__201
6.4.2 #line与#error201
6.5 C与汇编语言混合编程202
6.5.1 寄存器203
6.5.2 变量存储分配204
6.5.3 汇编指令概述205
6.5.4 C编译执行原理207
6.5.5 汇编调用C库函数209
6.5.6 C内联汇编210
6.6 小结216
第7章 C并行与网络基础217
7.1 多进程、多线程基础217
7.1.1 多进程编程218
7.1.2 多线程委托模型220
7.1.3 分离线程222
7.1.4 取消线程224
7.1.5 多线程竞争域230
7.1.6 线程互斥对象232
7.1.7 线程专有数据239
7.1.8 消息队列241
7.2 C网络基础245
7.2.1 TCP基础245
7.2.2 TCP编程基础245
7.2.3 TCP编程示例248
7.3 小结254
|
內容試閱:
|
为什么要写这本书
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔实验室的D. M. Ritchie于1972年推出。1978年后,C语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统应用程序;也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,适用于系统软件开发及嵌入式开发领域,具备很强的数据处理能力,不仅仅是在软件开发上,在各类科研中也都需要用到C语言。
指针是C语言中广泛使用的一种数据类型,是C语言中功能强大而又让人迷惑的亮点,运用指针编程是C语言最主要的风格之一。作为一把双刃剑,C指针让C语言成了能编写操作系统的接近硬件层的语言,能让编程者实现很多其他语言实现不了的功能;但是有时编程者也会感到无所适从,因为稍有不慎,就将造成内存泄漏、指针越界、指针类型错误等异常情况。而汇编中间码揭示了内存如何分配和使用、翻译形成的底层语言如何工作等,通过分析汇编中间码,揭开隐藏在C语言背后的秘密,剖析“C指针作为内存里的一个地址”这一事实。
C指针本质及其实现机制非常重要,为了让编程者更好地掌握这把“双刃剑”,本书从指针基础讲解入手,由浅入深,最后分析了汇编及底层语言,全面剖析了C指针。
读者对象
程序员。CC++程序员能在充分理解C指针以及指针实现机制的基础上,开发软件系统的中间件、核心库,评估内存占用、运行效率、突发异常、程序后门等情况,提高软件质量,增加可移植性,进行编译优化;而对占用CPU时间较多的代码可用汇编语言代替,提高软件运行速度。在受限环境(嵌入开发、并行计算、冗余系统等)下,正确使用C指针以及评估软件运行质量,能促使编写的代码更稳定、更安全、更高效。脚本语言程序员也能从C指针中收获很多,Python、Perl等脚本语言都能与CC++混合编程。
架构师。指针是CC++语言的基石,任何复杂的算法和大型甚至云计算软件系统都是基于这些基石构造的,只有掌握好系统的底层,才能提高系统整体运行效率。架构师在理解CC++指针以及实现机制的基础上,能根据软件运行环境定制适合软件需求的架构,每种软件架构在内存分配、程序运行等方面都有自己的使用策略。目前,随着大数据时代的来临,云计算平台发展很快,CC++语言编程质量的改进能提高云计算中单机的运行效率和稳定性,能优化数据在云计算网络的传输效率。
算法工程师。近年来,随着国内计算机行业的发展,数据挖掘、机器学习、算法工程、云计算、编译工程、芯片工程等新生事物相继出现,这些以前仅在高校和科研院所研究的技术需要算法工程师的努力才能成为现实,而掌握诸如指针等编程知识是实现算法的基础。
如何阅读本书
全书分为准备篇、基础篇、进阶篇。指针及相关内容是编程语言中较难理解的部分,脚本语言稍好些,CC++语言中会更加明显。虽然理解指针本身并不复杂,但指针之间的组合以及指针的灵活运用却存在不同的技巧,不同的组合能产生不同的效果,也有着不同的作用。本书力求从底层实现机制进行解析,同时配合CC++编程技巧以及某些指针运用技巧,讲解如何提高程序效能,如何避免滥用指针。
本书首先从在C语言编程的角度讲解C指针,力图使读者学会运用C指针进行开发,并能进一步灵活将指针运用在精巧的算法上,构造更复杂的软件系统。
接着,对C语言标准进行讲述。C语言属于高级语言,广泛采用的有C89和C99这两个主要标准。C89于1989年以ANSI X3.159—1989 “Programming Language C”名称发布生效,这个版本的语言经常被称作ANSI C,或C89;C99在C89的基础上新增了一些特性,作为C语言官方标准的第2版,于1999年以ISOIEC 9899:1999“Programming Language-C”名称发布生效,并于2000年3月被ANSI采纳。
最后,对编译器的实现原理进行解读。编译器对C语言进行编译,编译后形成可执行文件,针对CC++语言以编译的形式执行(TCC等提供了一种解释执行C脚本的方式,但其原理和编译执行差不多)的情况,重点从编译器生成的汇编中间码对指针进行剖析。
勘误和支持
由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。你在遇到任何问题或有更多的宝贵意见时,欢迎发送邮件至我的邮箱liu.xing.8@foxmail.com,很期待能够听到你的真挚反馈。此外,本书的代码及相关资源请在网盘(网盘地址:https:dwz.cnuo3gCxWK,提取码:457a)下载,本书读者QQ群为834755376。
致谢
在此,我衷心感谢机械工业出版社华章公司编辑杨福川老师和策划编辑杨绣国老师,由于他们的魄力和远见,让我顺利地完成了全部书稿。
谨以此书献给热爱C语言的朋友。
刘兴
中国,湖南
|
|