C/C++实践进阶之道
全新正版 极速发货
¥
43.51
5.5折
¥
79
全新
库存4件
作者陈黎娟 编著
出版社中国铁道出版社
ISBN9787113237585
出版时间2018-05
装帧平装
开本16开
定价79元
货号1201683352
上书时间2024-10-21
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
陈黎娟,目前就职于美国胜利通讯北京分公司,职位为Senior Firmware Engineer(不错固件工程师)。先后在SunPlus,SST等公司担任工程师和不错架构工程师。在嵌入式系统、嵌入式接口和底层固件开发方面积累了丰富的经验。
目录
篇夯实C语言核心基础
章Hello,C语言
1-1闭上眼睛细数C语言的特点2
C语言精巧2
支持结构化程序编写模型2
变量和语句是C语言的细胞3
数学运算和逻辑表达式是C语言的个难点3
函数是C语言赐给我们最有力的武器3
数组是我们次学习组织数据4
指针是C语言的精华,但它是魔鬼发明的4
struct是我们临摹世界的画板4
掌握基本概念的组合才是成为C语言高手的必经之路4
字符串是指针确认的5
位运算是C语言底层开发的特色5
预处理命令是程序开发的脚手架5
文件是一个序列5
1-2从基本概念开始6
1-3掌握C语言核心,逐步扩张8
1-4C++时代的C语言学习11
1-5C++:更好的C12
新的注释模式13
新的输入/输出方法13
const的新功能13
变量的定义更加灵活13
函数的重载13
带默认参数的函数13
变量的引用类型13
新的内存分配函数new和delete14
内嵌(inline)函数14
作用域运算符14
第2章建立起程序设计基本概念
2-1软件与程序15
2-2程序与可执行文件16
2-3程序与源程序17
2-4源程序与程序设计语言18
2-5程序设计的基本过程19
2-6文件和目录19
2-7理解编码上机调试和步骤22
2-8C/C++程序员成长经验23
阶段:C语言的学习23
第二阶段:课程设计和毕业设计24
第三阶段:硬件开发和学习C++25
第四阶段:中型项目开发经验25
第五阶段:大型项目开发经验25
总结个人学习成长的道路25
因材施教:使用两套教材26
第3章在VisualC++中验证C程序
3-1选择VisualC++的三个理由27
3-2调试程序的五个步骤28
3-3编写Console应用32
3-4跨过调试程序的最初障碍35
语法错误(SyntaxError)38
语义错误(SemanticError)38
运行错误(BUG)39
3-5VisualC++简易使用参考40
新建文档40
打开文档41
查看文档42
保存文档44
在打开的文档中搜索文本45
在已打开的文档中替换文本45
在磁盘文件中搜索文本46
常规表达式搜索46
3-6从TurboC到BorlandC++47
3-7理解函数库和头文件48
第4章代码基本逻辑:顺序、选择和循环
4-1流程图51
4-2顺序结构52
【示例4-1】输入三角形的三边长,求三角形面积52
4-3选择结构52
4-3-1if语句52
【示例4-2】if语句的基本用法(输入数值,如果大于0,输出“正数”)53
【示例4-3】利用if-else语句对数值进行正负的判断54
4-3-2switch语句54
【示例4-4】利用switch判断用户输入的日期是星期几55
【示例4-5】判断输入的日期是星期几(使用break语句)56
【示例4-6】利用if语句根据成绩范围给出等级56
4-4循环结构57
4-4-1利用goto语句和if语句构成循环57
【示例4-7】计算1+2+3+…+100的值57
4-4-2while语句58
【示例4-8】利用while循环语句计算1+2+3+…+100的值58
4-4-3do-while语句58
【示例4-9】利用do-while循环语句来计算1+2+3+…+100的值59
4-4-4for语句59
【示例4-10】小高斯的for循环语句实现方法。60
【示例4-11】小高斯的for循环语句实现方法之二(省略表达式2的应用举例)60
【示例4-12】小高斯的for循环语句实现方法之三(省略表达式3的应用举例)60
【示例4-13】小高斯的for循环语句实现方法之四(省略表达式1和表达式3的
应用举例)61
【示例4-14】当需要无限循环时,for循环语句表达式全部被省略的应用举例61
【示例4-15】小高斯的for循环实现方法之五(for语句中的逗号表达式)61
【示例4-16】读懂奇怪的for循环(for循环语句中的表达式2为特殊表达式时)61
【示例4-17】利用while循环求满足n2-15n-36>0的最小整数62
4-4-5break语句63
【示例4-18】演示break语句的应用:计算1+2+3+…+100的值63
4-4-6continue语句63
【示例4-19】演示continue语句的应用:计算1到100的偶数之和63
4-5本章综合实例64
4-5-1综合实例1:求某整数段区间中的素数,并输出64
4-5-2综合实例2:根据用户输入的年份判断年份是否为闰年66
第5章加强对函数的理解
5-1函数的引入67
【示例5-1】求从1加到100的值67
【示例5-2】求从1加到n的值68
【示例5-3】求从1加到n的值(高斯算法)69
5-2函数的基本概念69
5-3库函数70
5-4函数的嵌套调用71
【示例5-4】在max3函数中实现嵌套调用71
5-5代码封装:模块化程序设计的起步71
5-6接口/实现思想的次体现72
5-7总结一下:函数帮你编写更好的代码72
5-8对比Pascal语言和C语言中函数使用的差异74
第6章总结:快速掌握C语言基础知识
6-1再次UnderstandC76
6-2把基础知识串起来77
6-3综合实例1:打印Fibonacci数列78
6-4综合实例2:把Fibonacci数列中的素数找出来79
6-5综合案例3:在Fibonacci数列中加入数组的应用80
6-6最后的综合性代码81
6-7成为C程序员你还需要知道的事情82
6-8三小时你可以学会FORTRAN85
第2篇提升你的编程功力
第7章逐步写出大程序
7-1准备案例1:闰年的判断88
7-2准备案例2:这一天是星期几89
7-3更高要求:万年历的编写91
7-4再完善一下:打印某年日历94
7-5总结与思考:程序成长与模块化96
第8章自己动手编写小工具
8-1DIR命令今犹在97
8-2DOS版DIR命令98
8-3Windows版本的DIR100
8-4工具编写总结和练习103
8-5继续学习和提高104
第9章学会组织自己的代码
9-1解决问题的基本方法和C程序的基本结构105
9-2用Project管理自己的代码108
9-3为自己的代码扩充功能110
9-4养成一些编码的好习惯111
0章读源代码,逐步体会算法的力量
10-1读函数源代码,学技巧116
10-2体会算法的力量118
【示例10-1】判断一个自然数n是否是素数119
10-3算法的三重境界121
【示例10-2】写一个函数计算当参数为n(n很大)时的值1-2+3-4+5-6+7-…+n121
【示例10-3】在一个很小的内存空间中,将北京某电话局的8位电话号码排序。号码在
10000个以内122
10-4那些C语言必须调试的陷阱123
第3篇积累专业程序员的开发经验
1章烦琐但很重要的变量和类型
11-1计算机是如何存储变量的126
11-2确保每个对象在使用前已被初始化131
11-3局部变量和全局变量的差别133
11-3-1首先理解函数中的局部变量134
11-3-2其次理解函数外的全局变量135
11-3-3掌握变量在内存中的存储方式136
11-4掌握变量定义的位置与时机138
11-5引用难道只是别人的替身140
2章理解数组和指针
12-1理解指针的本质143
12-1-1指针变量和变量的指针143
12-1-2空指针和void指针145
12-1-3const修饰指针146
12-2论数组和指针的等价性147
12-3再论数组和指针的差异性149
12-3-1字符串数组与字符指针的区别149
12-3-2当编译器强行把指针和数组混合151
12-4充满疑惑的数组指针和指针数组152
3章常见更要谨慎的字符和字符串
13-1关于字符编码的讨论155
13-2请牢记字符串结束标志为‘\0’157
13-3请务必小心使用memcpy()系列函数159
【示例13-1】POD对象的复制160
13-4正确使用字符串处理函数161
4章表达式和语句中的陷阱
14-1运算符引发的混乱164
14-2表达式求值顺序不要想当然167
14-3switch-case语句的陷阱170
14-3-1正确使用break语句171
14-3-2case标号和default标号的正确使用173
14-4a||b和a&&b的陷阱174
14-4-1陷阱一:短路求值175
【示例14-1】没想清逻辑,代码死循环175
14-4-2陷阱二:逻辑运算混淆使用176
14-5“悬挂”else引起的问题177
5章函数的秘密
15-1禁止函数返回局部变量的引用180
15-2函数传值、传指针及传引用的效率分析183
15-3内联函数会像宏一样替换吗188
15-4函数重载需考虑什么191
15-4-1准确理解函数重载191
【示例15-1】实现一个打印函数,既可打印int类型,也可打印string类型191
15-4-2为什么引入函数重载192
15-4-3如何处理函数重载192
15-5不要让main返回void195
15-5-1理解main函数的定义形式195
15-5-2main函数的返回值作用196
15-5-3voidmain()形式函数的风险隐患197
15-5-4“好坏难定”的准则197
15-6尽量拒绝使用变参函数198
【示例15-2】实现一个支持std::string的printf199
15-7为何降低函数的圈复杂度202
15-7-1提炼函数的方法203
15-7-2以明确函数取代参数204
6章正确使用预处理
16-1使用#define定义字面值和伪函数206
16-1-1简单宏定义(字面值)206
16-1-2#define和const定义的恒值常量对比207
16-1-3带参数的宏定义(伪函数)208
16-1-4带参数的宏和函数的区别208
16-1-5引入宏的优点209
16-1-6宏定义和命名空间的关系209
16-2#define的使用陷阱210
16-2-1由操作符优先级引起的问题210
16-2-2使用宏定义,不允许参数发生变化211
16-2-3使用do{}while(false)将宏定义包含的多条表达式放到大括号中211
16-2-4关于...的使用212
16-2-5消除多余的分号213
16-3防止重复包含头文件214
【示例16-1】头文件重复包含bug214
16-3-1解决方案之一:#ifndef方式215
16-3-2解决方案之二:#pragmaonce215
16-3-3#pragmaonce与#ifndef的区别216
16-4assert的副作用216
【示例16-2】断言出现bug217
16-5多学一点,关于#和##的讨论219
16-5-1#让字符串巧妙用在宏定义中219
16-5-2##让宏定义像函数一样输入参数220
16-5-3#与##使用的陷阱221
7章非绝对禁止者,皆可使用
17-1表示语句结束的分号的思考222
17-2goto语句真的一无是处吗224
17-2-1观点一:goto语句是有害的225
【示例17-1】使用goto语句执行数组元素的交换顺序225
17-2-2观点二:某些情况下支持使用goto语句226
17-3条件操作符和逗号操作符229
17-3-1理解条件操作符并用好它229
17-3-2让逗号操作符派上用场230
17-4和魔鬼数字说再见230
17-4-1魔鬼数字带来的麻烦230
17-4-2给魔鬼数字起一个名字231
17-5关于循环语句的变化232
17-5-1新旧标准中for语句的变化232
17-5-2巧用do循环宏定义233
17-5-3循环语句的效率234
8章程序员应该知道的指针技术
18-1深刻理解void和void*236
18-2防微杜渐,拒绝野指针239
18-2-1野指针产生的原因240
18-2-2预防野指针的策略241
18-3“臭名昭著”的空指针到底是什么242
18-3-1怎样在程序中获得一个空指针243
18-3-2使用“if(p)”检查空指针是否可靠243
18-3-3NULL是什么,它是如何定义的244
18-3-4如果NULL和0作为空指针常数是等价的,到底该用哪一个244
18-3-5NULL可以确保是0,但空指针却不一定245
18-3-6利用空指针(NULL),提高程序运行效率245
18-4多维数组和指针245
【示例18-1】二维数组元素的遍历(两种多维数组声明方式的比较)248
18-5引用和指针的差异249
18-5-1相同点:都是地址概念且可实现继承类的动态绑定250
18-5-2不同点:五方面差异一一道来251
9章C++新增关键字中的关键
19-1尽可能多地使用const254
19-1-1函数声明使用const255
19-1-2函数返回值声明为const255
19-1-3const成员函数256
【示例19-1】字符串输出次数统计(const成员函数)256
19-1-4尽量用const常量替换#define常量定义257
19-2volatile和mutable用在何处258
19-3尽量用new/delete替代malloc/free263
19-3-1谈谈二者的区别263
【示例19-2】增加new/delete的意义263
19-3-2New运算符的三种形式分析265
19-4使用new/delete时要采用相同形式267
【示例19-3】C++中的内存管理(申请的资源放到同一个类中进行管理)268
19-5sizeof和对象的大小270
19-5-1讲讲sizeof的用法271
19-5-2标准数据类型的sizeof271
19-6谨慎使用static276
19-6-1static使用方式之静态局部变量276
19-6-2static使用方式之静态全局变量/函数277
【示例19-4】就算你用了extern,static也禁止你使用278
19-6-3static使用方式之静态成员变量/函数278
【示例19-5】……
第20章专业程序员也经常犯的错
20-1枚举和一组预处理的#define有何不同281
20-2为何structx1{structx1stX};无法通过编译284
【示例20-1】CA、CB两个类相互包含引用问题(无法通过编译)285
【示例20-2】CA、CB两个类相互包含引用问题(前向声明实现)286
【示例20-3】CA、CB两个类相互包含引用问题(friend声明实现)286
20-3实现可变数组struct{intnamelen;charnamestr[1];};287
20-4typedef使用的陷阱290
20-4-1typedef和宏混用陷阱290
20-4-2typedef新规和简化技巧292
20-4-3类回调函数的实现293
【示例20-4】隧道CTunnel类回调函数的声明和实现293
20-5优化结构体中元素的布局294
20-5-1内存对齐295
20-5-2progmapack()宏对齐297
20-6既有结构,为何引入联合298
20-6-1结构体与联合体的差异298
20-6-2联合体的经典应用场景300
20-7提防隐式转换带来的麻烦301
20-7-1隐式转换发生的几种情况301
20-7-2一个不经意的隐式转换陷阱304
20-8如何判定变量是否相等305
第4篇C++和类——面向对象的世界观
第21章从精通C到学习C++
21-1我们为什么要学习C++312
21-2故事:教C语言高手学C++313
21-2-1幕:用C++,程序会简单得多313
21-2-2第二幕:类就是封装315
21-2-3第三幕:用另外一个视角看类316
21-2-4第四幕:成长日志319
21-3拾级而上,成为C++高手319
第22章面向对象设计思想和类
22-1思路决定代码,程序设计思想321
22-1-1机器逻辑化编程思路:结构化程序设计321
22-1-2模拟现实世界的思路:面向对象程序设计322
22-2类,对现实世界抽象323
22-2-1类的定义和组成323
【示例22-1】定义一个手机的类324
【示例22-2】手机类数据成员的声明324
【示例22-3】手机类数据成员的类型325
【示例22-4】定义一个手机的类,包括一个显示手机名、型号、尺寸的成员函数326
22-2-2类成员的访问控制326
【示例22-5】类成员的访问控制属性327
【示例22-6】定义一个手机的类:实现显示手机名、型号、尺寸的功能328
22-2-3类实例和类成员访问328
【示例22-7】声明一个描述IPhoneX手机的实例指针并为其赋值329
【示例22-8】编写一个手机的类,实现设置和显示手机名、型号、尺寸的功能,
并声明一个针对IPhoneX型号手机的实例,实现设置和显示机器名、
型号、尺寸的功能330
22-2-4类的作用域和对象的生存周期331
【示例22-9】手机类的作用域331
22-2-5this指针332
【示例22-10】利用this指针访问手机类中的数据成员332
22-2-6静态成员333
【示例22-11】定义一个手机短信息的类333
【示例22-12】编写一个手机短信息类,要求能够统计短信息总数的功能333
【示例22-13】编写一个手机短信息类,利用静态成员函数取得短信息总数336
【示例22-14】类的静态成员访问337
22-2-7常成员337
【示例22-15】编写一个手机短信息类,定义一个用于表示信息优选长度的常数据
成员337
【示例22-16】编写一个手机类,定义用于显示手机基本信息的常成员函数339
22-3构造函数和析构函数340
22-3-1构造函数340
【示例22-17】编写一个手机类,定义其构造函数,对手机基本信息进行初始化340
【示例22-18】编写一个手机类,定义其构造函数,采用带有参数的构造函数对手机基本
信息进行初始化342
【示例22-19】定义一个描述IPhoneX手机的类,构造函数带有默认的参数343
22-3-2复制构造函数344
【示例22-20】编写一个手机类,定义其复制构造函数,实现对实例的复制344
【示例22-21】类的复制构造函数举例(当函数的形参是类的实例时)345
【示例22-22】类的复制构造函数举例(当函数的返回值为类的实例时)345
22-3-3默认复制构造函数346
【示例22-23】编写一
— 没有更多了 —
以下为对购买帮助不大的评价