经典畅销书全新升级,全面且深入地讲解Mac环境下C编程的各项知识,是从零开始系统学习C编程的选择
既详细讲解C语言的基础编程知识和技巧,又涵盖Xcode的使用方法,并且针对新的C标准做了更新,包含大量实用的代码示例。
《苹果开发之C程序设计(原书第2版)》是经典畅销书的全新升级版,全面且深入地讲解Mac环境下C编程的各项知识,是从零开始系统学习C编程的首选!书中既详细讲解C语言的基础编程知识和技巧,又涵盖Xcode的使用方法,并且针对最新的C标准做了更新,包含大量实用的代码示例。
《苹果开发之C程序设计(原书第2版)》共14章:第1章介绍本书通篇使用的软件工具;第2章介绍编程的基础知识;第3章讲述C语言的语句和函数;第4章讨论C语言的变量和运算符;第5章阐述如何调试程序;第6章介绍程序的流程控制;第7章讲解指针和参数;第8章介绍更多其他的数据类型;第9章讨论命令行的相关内容;第10章讲述如何设计自定义数据结构;第11章介绍文件的使用方法;第12章讨论如何处理错误;第13章讲解更高级的主题,比如强制类型转换、联合、递归、排序、集合等;第14章展望Objective-C的未来。
《苹果开发之C程序设计(原书第2版)》的第一版曾经影响了整整一代程序员,两位作者也都是经验丰富的专家,对于初学者来说完全不需要具备任何编程知识,只需从第1章开始逐章阅读即可。首先从基础知识开始,然后在Mac专家的指引下,采取小步前进的方式来学习C程序设计的精髓,从最为基础的工具的使用、变量的定义到复杂的指针、结构体、创建命令行工具等,书中都有深入且广泛的介绍。
《苹果开发之C程序设计(原书第2版)》是一本绝佳的C语言程序设计教程,不仅有准确的理论讲解,还穿插了大量实用的代码示例,没有任何编程经验的读者在学习完本书后将会对C语言有着全新的感悟和认识。
通过阅读《苹果开发之C程序设计(原书第2版)》,你将会从中学习到:
编写与编译原生C程序
通过变量与运算符探究强大的数学表达式
使用指针与参数增强程序
通过流程控制来控制程序的走向
设计自定义数据结构
创建自己的命令行工具
保存程序数据并再次读取回来
程序出现问题时处理错误
译者序
作者简介
技术审校者简介
前言
致谢
第1章 获取工具 1
1.1 安装Xcode 1
1.2 Xcode的价格 2
1.3 何为注册开发者 3
1.4 获取项目 3
1.5 使用Xcode 3
1.5.1 新建Xcode项目 5
1.5.2 工作空间窗口 6
1.5.3 运行项目 7
1.6 继续前进 8
第2章 编程基础 9
2.1 编程 9
2.1.1 C语言的其他替代者 9
2.1.2 Objective-C、C#、C++及Java怎么样呢 10
2.2 对于Mac或者iOS设备来说最佳编程语言是什么 10
2.3 编程过程 11
2.3.1 源代码 11
2.3.2 编译源代码 13
2.3.3 构建应用程序 14
2.4 接下来的内容 14
第3章 C语言基础:语句与函数 15
3.1 C语句 15
3.2 C函数 15
3.2.1 定义函数 16
3.2.2 语法错误与算法 17
3.2.3 调用函数 18
3.3 一个程序,两个函数 20
3.3.1 Hello2项目 20
3.3.2 Hello2源代码 22
3.3.3 运行Hello2 23
3.4 重复三次 24
3.5 产生一些错误 25
3.5.1 修复问题 26
3.5.2 再探细节 27
3.5.3 C是区分大小写的 27
3.6 探究Xcode自带的手册 29
3.7 接下来的内容 30
第4章 C语言基础:变量与运算符 32
4.1 变量简介 32
4.1.1 使用变量 33
4.1.2 变量名 34
4.1.3 类型的大小 35
4.1.4 字节与位 35
4.1.5 从1字节到2字节 37
4.2 运算符 37
4.2.1 +、-、++与--运算符 38
4.2.2 +=与-=运算符 39
4.2.3 *、/、%、*=、/=与%=运算符 40
4.3 使用圆括号 41
4.4 运算符优先级 42
4.5 示例程序 43
4.5.1 打开Operator.xcodeproj 43
4.5.2 分析Operator源代码 44
4.5.3 打开Postfix.xcode 47
4.5.4 分析Postfix源代码 47
4.6 修剪代码 49
4.6.1 源代码间距 49
4.6.2 代码注释 51
4.6.3 花括号之争 52
4.7 接下来的内容 53
第5章 调试 55
5.1 何为调试器 55
5.2 控制执行 56
5.2.1 设置断点 57
5.2.2 跳过语句 59
5.2.3 单步执行函数 59
5.2.4 跳出函数 62
5.2.5 全速前进 63
5.3 查看变量 64
5.4 调试器怎么像座冰山一样 66
5.5 接下来的内容 67
第6章 控制程序的流程 68
6.1 流程控制 68
6.2 表达式 69
6.2.1 结果为真的表达式 70
6.2.2 比较运算符 71
6.2.3 逻辑运算符 71
6.2.4 TruthTester.xcodeproj 74
6.3 复合表达式 74
6.4 语句 75
6.4.1 花括号 76
6.4.2 应该将分号放置在何处 77
6.4.3 两个常见陷阱 78
6.5 while语句 81
6.6 for语句 83
6.7 do语句 87
6.8 switch语句 88
6.8.1 不带语句的case 90
6.8.2 毁誉参半的穿越 91
6.8.3 switch总结 91
6.9 循环中的break 92
6.10 continue语句 92
6.11 IsOdd.xcodeproj 93
6.12 NextPrime.xcodeproj 95
6.13 接下来的内容 98
第7章 指针与参数 100
7.1 何为指针 100
7.1.1 为何要使用指针 101
7.1.2 图书馆示例小结 102
7.2 指针基础 103
7.2.1 变量地址 103
7.2.2 &运算符 104
7.2.3 声明指针变量 104
7.2.4 *运算符 105
7.3 函数参数 109
7.3.1 变量的作用域 109
7.3.2 函数参数的工作原理 110
7.3.3 参数是临时的 111
7.3.4 实参与形参的区别 112
7.4 函数返回值 113
7.4.1 printf()返回一个值 114
7.4.2 多条return语句 114
7.4.3 什么都不返回 115
7.5 整合 116
7.5.1 将指针作为形参 116
7.5.2 Factor.xcodeproj 117
7.6 关于指针的一些说明 119
7.6.1 按值传递与按引用传递 119
7.6.2 NULL指针值 119
7.6.3 指针的阴暗面 120
7.7 全局与静态变量 121
7.7.1 全局变量 121
7.7.2 向程序添加全局变量 123
7.7.3 静态变量 124
7.7.4 接下来的内容 125
第8章 更多数据类型 127
8.1 int之外的数据类型 127
8.1.1 FloatSizer 128
8.1.2 整型类型 133
8.1.3 IntSizer.xcodeproj 135
8.1.4 int的优缺点 136
8.2 最佳整型类型 139
8.2.1 语义类型 140
8.2.2 精确宽度类型 140
8.2.3 整型与浮点型 141
8.3 使用字符 141
8.3.1 ASCII字符集 142
8.3.2 ASCII.xcodeproj 142
8.3.3 分析ASCII源代码 145
8.4 数组 146
8.4.1 为何使用数组 147
8.4.2 Dice.xcode 147
8.4.3 分析Dice源代码 148
8.4.4 要小心 151
8.5 #define指令 151
8.5.1 在代码中使用#define 153
8.5.2 分析预处理器 154
8.5.3 使用#define指令的好处 155
8.5.4 类似于函数的#define宏 156
8.6 文本字符串 157
8.6.1 内存中的文本字符串 157
8.6.2 FullName.xcodeproj 158
8.6.3 Overflow.xcodeproj 161
8.7 接下来的内容 163
第9章 命令行 165
9.1 命令行基础 165
9.1.1 命令参数 167
9.1.2 命令进阶 168
9.1.3 shell命令来自何处 169
9.2 创建命令行工具 170
9.2.1 命令参数与main() 171
9.2.2 SeeArgs.xcodeproj 171
9.3 部署程序 173
9.4 使用路径 176
9.4.1 当前目录与相对路径 176
9.4.2 特殊目录名 178
9.4.3 主目录名 179
9.5 安装命令行工具 179
9.5.1 创建私有的bin目录 180
9.5.2 安装工具 181
9.5.3 配置PATH变量 181
9.6 字符输入 182
9.6.1 管道 182
9.6.2 重定向 183
9.6.3 Namer.xcodeproj 186
9.7 指针运算 191
9.7.1 指针比较 191
9.7.2 指针加法 191
9.7.3 指针减法 193
9.8 WordCount.xcodeproj 194
9.8.1 分析WordCount源代码 195
9.8.2 在Shell中测试WordCount 201
9.9 RomanNumeral.xcodeproj 203
9.9.1 main() 204
9.9.2 NumberToRomanNumeral() 204
9.10 关于命令行界面的总结 208
9.11 接下来的内容 209
第10章 设计自定义数据结构 210
10.1 打包数据 210
10.2 模型A:3个数组 210
10.3 模型B:结构化方式 217
10.4 将结构体作为参数传递 222
10.5 ParamAddress.xcodeproj 224
10.6 结构体数组 225
10.7 分配自己的内存 226
10.7.1 使用malloc() 227
10.7.2 free() 229
10.7.3 追踪地址 229
10.8 使用链表 230
10.8.1 为何使用链表 230
10.8.2 创建链表 230
10.9 DVDTracker.xcodeproj 231
10.10 接下来的内容 239
第11章 使用文件 240
11.1 何为数据文件 240
11.2 文件基础 241
11.2.1 理解文件名 241
11.2.2 打开与关闭文件 242
11.3 读取文件 243
11.4 PrintFile.xcodeproj 245
11.5 写入文件 248
11.6 其他文件操纵方法 260
11.6.1 更新模式 260
11.6.2 随机文件访问 261
11.6.3 使用随机访问函数 261
11.6.4 DinoEdit.xcodeproj 262
11.6.5 文本与数据文件 268
11.6.6 处理端的问题 269
11.7 改进RomanNumeral 270
11.7.1 分析RomanNumeral.xcodeproj 271
11.7.2 测试RomanNumeral 274
11.8 文件系统对象 276
11.9 接下来的内容 277
第12章 错误处理 278
12.1 墨菲定律 278
12.2 规则#1:永远不要假设 279
12.2.1 关于变量的假设 280
12.2.2 检查范围 281
12.2.3 容忍所有可能值 282
12.2.4 对假设进行断言 283
12.3 规则#2:保持警觉 285
12.3.1 关注返回值 285
12.3.2 errno 286
12.4 规则#3:制订逃生计划 288
12.4.1 紧跟成功 288
12.4.2 提前返回 290
12.4.3 忽略之前的失败 291
12.4.4 过滤错误 293
12.4.5 尽早退出 294
12.4.6 跳过 295
12.5 规则#4:预测问题 298
12.6 规则#5:适当选取 299
12.7 接下来的内容 300
第13章 高阶主题 301
13.1 类型转换 301
13.1.1 转换规则 302
13.1.2 转换警告 304
13.2 强制类型转换 304
13.3 const修饰符 307
13.4 创建自定义类型 308
13.4.1 struct typedef 309
13.4.2 前向引用 309
13.5 枚举类型 310
13.6 联合体 312
13.7 递归 314
13.7.1 迭代 315
13.7.2 递归 315
13.8 函数指针 318
13.9 其余运算符 319
13.10 深入探索标准库 321
13.10.1 使用标准库进行排序 322
13.10.2 Core Foundation中的集合 327
13.11 接下来的内容 333
第14章 未来展望 335
14.1 Mac用户界面 335
14.1.1 学习Objective-C 336
14.1.2 Cocoa与Cocoa Touch 336
14.2 了解一些OS X代码 337
14.3 iOS应用速览 339
14.4 Objective-C速览 340
14.5 继续前行 343
附录 练习答案 344