C语言进阶
2012-7
机械工业出版社
牟海军
347
无
为什么要写这本书 或许绝大多数人都有这样的经历,最初学习C语言的目的是为了应付考试,所以对于C语言只能算是一知半解。真正运用C语言进行编程时会出现很多问题,让人措手不及,这时才发现自己只能理解C语言的皮毛,虽能看懂简单的代码,却写不出程序来,对于那些稍微复杂的代码就更是望尘莫及了。 为了摆脱对C语言知其然不知其所以然的状态,本书将带领读者重启C语言学习之旅,这次不再是为了考试,而是出于真正的使用需要,所以有针对性地给出了C语言学习中的重点、难点与疑点解析,希望能够帮助更多的C语言爱好者走出困境,真正理解C语言,真正做到学以致用。 为了让读者能够真正地理解C语言学习中的重点、难点与疑点,以及体现本书学以致用的特色,全书没有采用枯燥的文字描述来讲解C语言相关的知识点,而是采用知识点与代码结合的方式,同时对于代码展开相应的分析,这就避免了部分读者在学习了相关知识点之后仍然不知道如何使用该知识点的弊端,使读者可以通过代码来加深对相关知识点的理解。 全书在结构安排上都是围绕C语言学习中的重点、难点与疑点进行讲解,如第1章并没有从讲解C语言中的基础知识点开始,而是先列举了C语言学习中易混淆的核心概念,使读者清晰地区分这些核心概念后再开始相应知识点的学习。本书对基础知识点也并非概念性地讲解,而是重点讲解了使用中的要点,同时重点讲解了C语言中的一些调试和异常处理的方法,以及误区和陷阱知识点。最后一章讲解了编程中必须掌握的一些常用算法。总之,本书能够使读者在现有基础上进一步提高自己的C语言编程能力,更清晰地认识和理解C语言。 本书读者对象 本书适合以下读者: C语言爱好者 嵌入式开发人员 初、中级C语言程序员 参加C语言培训的学员 如何阅读本书 本书共11章,第1章主要针对C语言学习中一些容易混淆的核心概念进行具体讲解,内容跨度比较大,初学者学起来可能有些吃力,所以建议在遇到不懂的知识点时暂时跳过,待学习了后面的相关知识点后再进行相应的学习;第2~8章有针对性地讲解了C语言中的相应知识点,同时有针对性地对其中的要点部分进行具体讲解,读者可以通过这几章的学习夯实每个知识点的基础;第9章重点讲解了在C语言编程中进行调试和异常处理的一些常见方法和技巧;第10章重点讲解了C语言编程中的一些陷阱知识点,通过本章的学习读者可以知道如何在以后编程时绕开陷阱;第11章讲解了一些编程中的常用算法,这是编程中必然会遇到的,因此读者有必要掌握这些常见的算法。 最后在附录部分给出了养成良好编程习惯的建议。本书针对每个知识点都提供了相应的代码,建议读者在学习的过程中自己动手编写,这样才会发现自己在C语言学习方面的缺陷,进而快速提升自己的编程能力。 勘误和支持 除署名作者外,参与本书材料整理和代码测试工作的还有项俊、马晓路、刘倩、罗艳、胡开云、余路、张涛、张晓咏、时翔、秦萤雪等。由于作者的水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。书中的全部源文件除可以从华章网站下载外,还可以发邮件向我索取。如果你有更多的宝贵意见,也欢迎发邮件与我交流,期待得到你们的真挚反馈。 致谢 本书得以出版要感谢很多人,首先要感谢我的导师侯建华教授,无论是在科研还是平时的学习和生活中,都得到您严格的指导和无微不至的关怀,在此向您表示最真诚的敬意和衷心的感谢! 其次要感谢我的好朋友们,他们是刘倩、马晓路、胡开云、时翔、张晓咏、余路、张涛,有你们的陪伴,我每天都过得很开心,感谢你们在生活中给予我的关心和体贴。同时也感谢实验室的项俊、梁娟、左坚、罗艳、严明君、李思,谢谢你们平时给予的帮助。 感谢机械工业出版社华章公司的编辑杨福川和姜影,你们在这一年多的时间中始终支持我的写作,你们的鼓励和帮助指引我顺利地完成全部书稿。 最后要感谢我的家人,没有你们的鼓励和支持,就没有我今天的成绩。在此要特别感谢我的父亲,您多年来对我的悉心教导,我都铭记在心。 谨以此书献给众多热爱C语言的朋友们! 牟海军(bigloomy) 2012年4月于中国武汉
C语言是编程语言中的一朵奇葩,虽已垂垂老矣,但却屹立不倒,诞生了数十年,仍然是最流行的编程语言之一。C语言看似简单,却不易吃透,想要运用好,更是需要积淀。《C语言进阶:重点、难点与疑点解析》是一本修炼C程序设计能力的进阶之作,它没有系统地去讲解C语言的语法和编程方法,而是只对C语言中不容易被初学者理解的重点、难点和疑点进行了细致而深入的解读,同时包含大量技巧和最佳实践,揭露了C语言中那些鲜为普通开发者所知的秘密,旨在让读者真正掌握C语言,从而编写出更高质量的C程序代码。
全书一共11章:第1章重点阐述了C语言中不易被理解的多个核心概念,很多初学者在理解这些概念时都会存在误区;第2-8章对预处理、选择结构和循环结构的程序设计、数组、指针、数据结构、函数和文件等知识点的核心问题和注意事项进行了讲解;第9章介绍了调试和异常处理的方法及注意事项;第10章对C语言中的若干容易让开发者误解误用的陷阱知识点进行了剖析;第11章则对所有程序员必须掌握的几种算法进行了详细的讲解;附录经验性地总结了如何养成良好的编码习惯,这对所有开发者都尤为重要。
牟海军,资深C语言开发工程师,钟爱C语言,对C语言有较深入的理解和研究,实践经验较为丰富。喜欢研究算法,谙熟各种常见和经典的算法,颇有心得。擅长嵌入式linux开发,以及使用QT进行嵌入式开发。活跃于CSDN等技术社区,是CSDN的推荐博客专家。
前言
第1章 必须厘清的核心概念
1.1 堆栈
1.2 全局变量和局部变量
1.3 生存期和作用域
1.3.1 生存期
1.3.2 作用域
1.4 内部函数和外部函数
1.5 指针变量
1.6 指针数组和数组指针
1.7 指针函数和函数指针
1.8 传值和传址
1.9 递归和嵌套
1.10 结构体
1.11 共用体
1.12 枚举
1.13 位域
第2章 预处理
2.1 文件的包含方式
2.2 宏定义
2.2.1 简单宏替换
2.2.2 带参数的宏替换
2.2.3 嵌套宏替换
2.3 宏定义常见错误解析
2.3.1 不带参数的宏
2.3.2 带参数的宏
2.4 条件编译指令的使用
2.5 #pragma指令的使用
第3章 选择结构和循环结构的程序设计
3.1 if语句及其易错点解析
3.2 条件表达式的使用
3.3 switch语句的使用及注意事项
3.4 goto语句的使用及注意事项
3.5 for语句的使用及注意事项
3.6 while循环与do while循环的使用及区别
3.7 循环结构中break、continue、goto、return和exit的区别
第4章 数组
4.1 一维数组的定义及引用
4.2 二维数组的定义及引用
4.3 多维数组的定义及引用
4.4 字符数组的定义及引用
4.5 数组作为函数参数的易错点解析
4.6 动态数组的创建及引用
第5章 指针
5.1 不同类型指针之间的区别和联系
5.2 指针的一般性用法及注意事项
5.3 指针与地址之间的关系
5.4 指针与数组之间的关系
5.5 指针与字符串之间的关系
5.6 指针与函数之间的关系
5.7 指针与指针之间的关系
第6章 数据结构
6.1 枚举类型的使用及注意事项
6.2 结构体变量的初始化方法及引用
6.2.1 结构体的初始化
6.2.2 结构体的引用
6.3 结构体字节对齐详解
6.4 共用体变量的初始化方法及成员的引用
6.5 传统链表的实现方法及注意事项
6.6 颠覆传统链表的实现方法
6.6.1 头结点的创建
6.6.2 结点的添加
6.6.3 结点的删除
6.6.4 结点位置的调整
6.6.5 检测链表是否为空
6.6.6 链表的合成
6.6.7 宿主结构指针
6.6.8 链表的遍历
第7章 函数
7.1 函数参数
7.2 变参函数的实现方法
7.3 函数指针的使用方法
7.4 函数之间的调用关系
7.5 函数的调用方式及返回值
第8章 文件
8.1 文件及文件指针
8.2 EOF和FEOF的区别
8.3 读写函数的选用原则
8.4 位置指针对文件的定位
8.5 文件中的出错检测
第9章 调试和异常处理
9.1 assert宏的使用及注意事项
9.2 如何设计一种灵活的断言
9.3 如何实现异常处理
9.4 如何处理段错误
第10章 陷阱知识点解剖
10.1 strlen和sizeof的区别
10.2 const修饰符
10.3 volatile修饰符
10.4 void和void*的区别
10.5 #define和typedef的本质区别
10.6 条件语句的选用
10.7 函数realloc、malloc和calloc的区别
10.8 函数和宏
10.9 运算符==、=和!=的区别
10.10 类型转换
第11章 必须掌握的常用算法
11.1 时间复杂度
11.2 冒泡法排序
11.3 选择法排序
11.4 快速排序
11.5 归并排序
11.6 顺序查找
11.7 二分查找
附录 如何养成良好的编程习惯
第1章 必须厘清的核心概念 1.1 堆栈 1.2 全局变量和局部变量 1.3 生存期和作用域 1.4 内部函数和外部函数 1.5 指针变量 1.6 指针数组和数组指针 1.7 指针函数和函数指针 1.8 传值和传址 1.9 递归和嵌套 1.10 结构体 1.11 共用体 1.12 枚举 1.13 位域 人或多或少都有一点惰性和急功近利,我就是这样,在一开始学习编程的时候不喜欢阅读那些枯燥的文字,喜欢直接去阅读代码。但是渐渐地,我发现一个问题,那就是编程时经常会犯一些低级的错误。通过总结才明白,这些错误源于自己对C语言中的基本概念一知半解,知其然,不知其所以然,发现问题后才意识到那些枯燥的文字对掌握并熟练使用C语言非常重要。为了让读者少走一些弯路,本书的第1章先来介绍C语言中的核心概念。 开始本章的学习之前,先向读者交代一下,由于本章涉及的知识范围较广,有些初学者理解起来会有些吃力,因此建议读者有选择地阅读,遇到陌生知识点可以暂时跳过,待学习了后面章节的内容后再回过头来阅读这一章的相关内容。当然,学习代码的最佳方法是动手,所以本章在讲解C语言的一些基本概念的同时,为了便于读者理解,有针对性地列举了一些代码,读者也可以通过这些代码来验证所学的概念,体会学习的乐趣,以避免单纯通过阅读文字来枯燥地学习概念。 ……
在编程语言领域,各种新的语言一直层出不穷,C语言虽已有数十年的历史,但却依然位于编程语言排行榜的榜首,这在编程领域算是独一无二了。C语言入门相对简单,但是要透彻理解和掌握却不容易,本书对初学者不易理解的难点、疑点和重要知识点进行了解读和剖析,内容不仅涉及几乎所有的语法知识点,而且也包括算法和编码规范方面的话题。对于有一定经验且想进一步提高的C语言开发者而言,本书值得仔细品读,强烈推荐! ——中国领先的IT技术网站
透析C语言中的核心概念、重要知识点、不易理解的知识点,以及容易被错误理解的知识点,是修炼C程序设计能力的必读之作!
无
这是12年才出的书 感觉很新 作者是用心写了的 看的出来有一定功底 对于C语言的很多是是而非的问题阐述的比较到位 国内难得的能和国外书籍媲美的 不过美中不足在于不够特别深 对于初学者想进阶的很不错 但对于软件开发老手 稍显单薄
资深工程师写的书,要点很突出,都是平时容易忽略的地方,C语言求职必学
从目录上看,这本书非常适合我这种有C基础,但却理解不够深刻的学生。尤其期待指针和必须掌握的常用算法这两章,希望能有所收获。
C语言进阶必备
本以为C语言会很枯燥乏味,上次计算机二级也没有过,这次看到这本书感觉内容挺好的,因为作者貌似是一个不喜欢啰嗦讲一些文面上的东西,通俗易懂又是用专业用语。内容我觉得考C语言的同学也可以去买来看看
查缺补漏很好的一本书哦,实在是一本好书,很实用,很适合有一点C语言基础的读者,它会让你更近一层楼哦!
内容涉及编程中可能碰到的关键问题 还好
特别给那些自认为C很牛,却没有真正实战经验的同学
看完 C Primer Plus 再看这本书正好可以查漏补缺,非常满意。讲得非常透彻,虽然有些打字上的小错误,不过可以忽略不计了。
很喜欢这样包装的,还给书包了一层塑料袋子,内容也不错
讲的还可以,值得购买!
才看了几页但已经够我评它为好书了,本来还后悔买,没想到看了一小节就觉得值,后面会继续看
内容全面,浅显易懂,给人以豁然开朗的感觉。
正版书,与期待的相同
很多细节描述的不错;值得进一步看看!
很全面,不错的查缺补漏的辅导教材
书还是挺好的,挺有用的
该买专家编程的
没想象中好,不过还可以吧
书看完了,感觉还不错,对于基础不牢靠的人来说,是本好书!
面试 考试复习必备
还不错的,浏览了一下,还是一本不错的书
对于基础不好的人可能是本好书,但我觉得价格偏贵。
概念解释得很详细,还有相关的实例作为辅助参考。
虽然提到了初学者常常遇到的问题,但是还是有泛泛而谈的感觉,问题没有展开去讨论,没有结合实际应用案例,比如应该结合多级菜单的实现讲解struct的应用,等等,还是停留在课堂中,实际应用一般