首页>参考读物>计算机科学与技术>软件与程序设计

C指针:基本概念、核心技术及最佳实践
作者 : [印度] 纳威恩·拓奥普(Naveen Toppo) 海瑞思科什·德万(Hrishikesh Dewan)著
译者 : 王贵财 译
丛书名 : C/C++技术丛书
出版日期 : 2016-05-30
ISBN : 978-7-111-53818-9
定价 : 49.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 184
开本 : 16
原书名 : Pointers in C: A Hands on Approach
原出版社: Apress
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

C语言功能强大,已成为最受欢迎的编程语言。指针是C语言最重要的特性但难以理解。本书插图丰富,包含大量图例和代码,让初学者、普通程序员,以及专家级的程序员都能理解指针概念并掌握指针用法。
本书共8章。第1章介绍内存、实时内存与虚拟内存概念,详细解释编译步骤和内存段利弊;第2章介绍指针变量及其初始化、比较、内存申请和常用修饰符等概念,诠释引用和解引用操作,以及使用多重指针访问内存地址及其值的方法;第3章详细解释指针运算和一维数组,演示如何使用指针加减运算访问各种连续内存位置,同时介绍使用指针访问数组及其指定索引的方法;第4章介绍使用指针初始化静态字符串并对其操作的方法;第5章介绍指针访问多维数组的用法;第6章详细描述使用指针访问结构体与成员字段的方法,同时介绍函数指针动态调用函数的方法;第7章解释函数指针概念与用法;第8章介绍文件处理细节,深入说明使用读写函数文件指针操作文件的过程。
本书全面而深入地讲解了指针基础和高级特性等方面的内容,旨在帮助程序员发挥指针的全部潜力。
虽然指针被广泛使用,但理解和正确使用指针仍是一个显著问题。本书首先介绍基本构件块,如内存细节、编译过程(解析/预处理/汇编器/目标代码生成)、可执行程序的实时内存组织与虚拟内存。这些基本构建块有助于初学者和高级读者更加清晰并深入掌握指针概念。书中插图丰富,并配有大量图例和各种代码(设备驱动程序代码段、算法,以及用到指针时的数据结构代码),包含快速提示,不仅有助于程序员学习指针概念,同时还能学到C语言的其他特性。

通过阅读本书,你将学到:
指针概念及其不同数据类型的使用
指针的基本与高级特性
编译器概念、虚拟内存、数据结构、算法与字符串处理
内存概念与运行组织
指针的基础知识与高级特性
空指针、悬摆指针、VOID指针与CONST修饰符
实现动态数据结构
二级指针
三级指针与四级指针
自引用结构体、结构填充与基于优化技术的高速缓存

作者简介
Naveen Toppo 西门子(印度)技术服务公司的CT直流技术部顾问,有长达7年的工作经验,目前研究领域是硬件特性的最佳利用(性能工程)。
Hrishikesh Dewan 西门子(印度)技术服务公司(STS)首席工程师,主要从事大型分布式存储系统方面的研究。加入STS之前,他创立了一个非常小的开源软件开发组织—“Srishti”,用来促进高等院校的开源工具和软件发展。他还曾在ETH的子公司和Dishnet无线公司(Aircel)的研发部门担任2年多的项目经理。
译者简介
王贵财 北京工业大学模式识别与智能系统专业博士,现任教于河南工业大学信息科学与工程学院,主要从事计算机视觉、粮情监测、嵌入式系统开发等方面的研究工作。

图书前言

自1978年C语言问世以来,它凭借强大的功能已成为最受程序员欢迎的编程语言。C语言最初虽是为实现UNIX操作系统而设计的,可它广泛应用于非UNIX平台下的软件开发。C语言一直是底层开发、设备驱动程序、嵌入式系统开发、移动设备开发等领域的首选语言。
指针是C语言最重要的特性,它非常有趣但不好理解。C作为一门较低级的语言,要求程序员对许多计算机基本概念非常熟悉。C也不是强类型语言。
指针概念的神秘性众所周知,这使得某些情况下很难理解指针的用法。本书力求使初学者、普通程序员、专家级程序员都能理解指针的概念。为让读者了解指针概念,我们引入背景信息,它无关语言本身,但也是计算机科学文献的一部分。该背景信息将帮助读者理解指针的概念。
本书的内容结构如下:
第1章是全书的基础。该章介绍内存和实时内存概念,帮助读者理解如何访问内存,以及数据/指令在内存中如何存储。该章帮助读者理解编译步骤,包括解释程序预处理、汇编和目标代码等中间结果如何生成。而且也给出编译器创建内存段的详细背景。通过详细解释内存段利弊,可以帮助读者理解各种变量的用法。另外该章还讨论了虚拟内存的概念。
第2章介绍指针变量的概念和它最重要的操作(引用和解引用)。该章介绍指针变量初始化、比较及内存分配、NULL指针、悬摆指针、VOID指针和CONST修饰符等概念。该章详细演示integer、char等基本数据类型指针的用法,也详细介绍如何用多重指针访问内存地址和存储这些位置的值。
第3章详细解释指针运算和一维数组。该章详细介绍指针运算。演示使用指针加减运算如何访问各种连续内存位置。用一整节介绍用指针访问数组类型的用法。该章也介绍各种访问数组指定索引的方法。
第4章介绍如何使用指针初始化静态字符串并对其进行操作。给出了包括strcpy、substring等基本字符串处理函数实例。字符串操作对于解决与实现算法非常重要。
第5章介绍指针访问多维数组的用法,特别是二维数组和三维数组。
第6章详细描述怎样使用指针访问结构体与成员字段。使用结构体和指针便于实现复杂、动态的数据结构。该章也给出如何用指针处理链表和二叉树等数据结构的实例。该章用一整节内容专门介绍怎样用函数指针动态调用函数。
第7章解释函数指针概念的用法。
第8章介绍文件处理细节,并深入说明如何使用读写函数文件指针操作文件。

上架指导

计算机\程序设计

封底文字

本书全面而深入地讲解了指针基础和高级特性等方面的内容,旨在帮助程序员发挥指针的全部潜力。
虽然指针被广泛使用,但理解和正确使用指针仍是一个显著问题。本书首先介绍基本构件块,如内存细节、编译过程(解析/预处理/汇编器/目标代码生成)、可执行程序的实时内存组织与虚拟内存。这些基本构建块有助于初学者和高级读者更加清晰并深入掌握指针概念。书中插图丰富,并配有大量图例和各种代码(设备驱动程序代码段、算法,以及用到指针数的数据结构代码),包含快速提示,不仅有助于程序员学习指针概念,同时还能学到C语言的其他特性。

通过阅读本书,你将学到:
• 指针概念及其不同数据类型的使用
• 指针的基本与高级特性
• 编译器概念、虚拟内存、数据结构、算法与字符串处理
• 内存概念与运行组织
• 指针变量的引用与解引用
• 空指针,悬摆指针,VOID指针与CONST修饰符
• 实现动态数据结构
• 二级指针
• 三级指针与四级指针
• 自引用结构体、结构填充与基于优化技术的高速缓存

作者简介

[印度] 纳威恩·拓奥普(Naveen Toppo) 海瑞思科什·德万(Hrishikesh Dewan)著:暂无简介

译者简介

王贵财 译:暂无简介

译者序

C是一门通用的编程语言,广泛用于系统软件与应用软件的开发。C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序员中备受青睐,成为近几十年来使用最为广泛的编程语言。
指针是C语言最重要的特性,指针的运用被认为是最大的难关。关于指针的学习,我们经常听到这样的建议:“如果理解了计算机的内存和地址等概念,指针什么的就简单了。”果真如此吗?为让读者了解指针概念,本书从介绍内存和实时内存概念开始,然后讲述了指针变量的概念和它最重要的操作(引用和解引用)、指针运算和一维数组、使用指针处理字符串、指针访问多维数组的用法、使用指针访问结构体与成员字段、函数指针概念的用法,以及文件I/O处理等知识。通过阅读本书,读者能快速掌握C指针的核心技术,本书特点如下:
通过分析大量实例,演示如何使用C指针。
由浅入深讲解实例,帮助读者逐步掌握C指针的用法。
图文并茂,让读者及时了解每一步的操作结果,帮助读者更好地检验学习进度。
夜深人静,万物安睡,世界不再喧哗,心最易平静。伴随淡淡的轻音乐文字在键盘敲打中跳跃于荧屏,一次次敲打键盘,一次次把想法寄托于文字。在这宁静与悠远的意境中翻译本书是一件美好的事情。翻译过程中常常为作者对C指针的深入理解和独到见解而惊讶、赞叹。对我自己而言,这也是一个学习与提高的过程,同时也为能向国内广大读者推荐这本好书而高兴。为做到专业词汇权威准确,内容忠实原书,我查阅了大量资料。但受限于时间和精力,本书难免存在错误,恳请读者批评指正。
本书翻译过程中得到河南工业大学高层次人才基金(2012BS062)项目与河南工业大学优势专业培育工程项目(计算机科学与技术)资助。
特别感谢机械工业出版社的编辑为本书出版所付出的辛勤劳动。
感谢河南工业大学信息科学与工程学院靳小波博士对本书翻译的支持与鼓励,也特别感谢我的家人给予的包容和支持。

王贵财
2015年3月

图书目录

译 者 序
作者简介
前  言
致  谢
第1章 内存、实时内存管理和虚拟内存 1
1.1 内存与类型 2
1.1.1 类型 2
1.1.2 内存排列 4
1.2 数据与指令 5
1.2.1 处理器如何访问主存 6
1.2.2 缓存 6
1.3 编译过程链 8
1.3.1 预处理 9
1.3.2 编译 10
1.3.3 汇编器 12
1.3.4 链接 12
1.3.5 加载器 13
1.4 内存模型 14
1.4.1 实地址内存模型 16
1.4.2 实地址模式下的地址转换 16
1.4.3 扁平内存模型 16
1.4.4 分段内存模型 17
1.5 使用分段的内存排列 18
1.5.1 分段 18
1.5.2 代码段 18
1.5.3 数据段 19
1.5.4 未初始化/BSS段 19
1.5.5 栈段 20
1.5.6 堆段 20
1.6 实时内存组织 21
1.6.1 函数调用的复杂性 21
1.6.2 函数调用步骤 22
1.7 内存段 24
1.8 虚拟内存组织 26
1.8.1 一窥虚拟内存系统 26
1.8.2 分页 29
1.8.3 页表 29
1.9 小结 30
第2章 指针基础 31
2.1 变量的地址 32
2.2 地址操作符 33
2.3 指针声明 34
2.4 指针赋值 35
2.5 指针变量大小 36
2.6 指针解引用 38
2.7 指针的基本用法 39
2.7.1 传值 40
2.7.2 引用传递 40
2.8 指针和常量 42
2.8.1 常量指针变量 42
2.8.2 常量指针 43
2.8.3 指针常量 44
2.9 多级指针 45
2.10 理解神秘的指针表达式 46
2.10.1 一级指针引用 47
2.10.2 一级指针解引用 47
2.10.3 二级指针引用 48
2.10.4 二级指针解引用 48
2.11 小结 50
第3章 指针运算与一维数组 51
3.1 数组内存排列 52
3.2 指针运算 55
3.2.1 指针加法 56
3.2.2 指针减法 58
3.3 数组探究 60
3.3.1 动态数组 62
3.3.2 指针数组 64
3.3.3 数组指针 66
3.4 小结 67
第4章 指针与字符串 69
4.1 内存中的字符串排列 70
4.2 动态内存分配 72
4.3 字符串操作 75
4.3.1 处理字符串输入 75
4.3.2 字符串遍历 75
4.3.3 字符串复制 77
4.3.4 字符串连接 77
4.4 字符串数组 78
4.5 小结 84
第5章 指针与多维数组 85
5.1 数组排列 86
5.1.1 二维数组指针 87
5.1.2 三维数组排列 94
5.2 小结 104
第6章 结构体指针 105
6.1 定义结构体 106
6.2 声明结构体变量 107
6.3 访问结构体成员 107
6.4 初始化结构体变量 108
6.4.1 方法1 108
6.4.2 方法2 108
6.5 结构体嵌套 108
6.6 结构体存储 109
6.7 结构体填充 111
6.7.1 数据对齐 111
6.7.2 字段填充 112
6.8 当结构体填充派不上用场时 115
6.9 结构体封装 118
6.10 结构体赋值与复制 120
6.11 结构体指针 122
6.11.1 访问成员变量 122
6.11.2 传递结构体指针变量 124
6.12 常见错误 125
6.13 结构体指针类型转换 126
6.14 自引用结构体 126
6.15 数据结构与算法 127
6.15.1 链表 127
6.15.2 二叉搜索树 129
6.15.3 遍历节点 131
6.16 小结 131
第7章 函数指针 133
7.1 定义函数指针 134
7.2 初始化函数指针 135
7.3 使用函数指针 135
7.4 函数指针调用的汇编细节 137
7.4.1 直接调用函数 138
7.4.2 利用函数指针间接调用函数 138
7.5 函数指针数组 139
7.6 从函数中返回函数指针 140
7.6.1 复杂方法 140
7.6.2 简单方法 141
7.7 Linux内核里的函数指针用法 142
7.8 神秘的函数指针声明总结 144
7.9 小结 145
第8章 文件I/O指针 147
8.1 辅存的物理排列 148
8.1.1 盘面图 148
8.1.2 硬盘驱动器与CPU的接口 149
8.1.3 硬盘寻址方案 150
8.2 文件系统结构简介 150
8.2.1 逻辑文件系统 150
8.2.2 基本文件系统 152
8.3 创建一个文件系统需要什么 152
8.3.1 硬盘数据结构体 152
8.3.2 内存数据结构体 152
8.4 访问文件 153
8.5 首要任务 154
8.6 次要任务 155
8.7 从文件读取 156
8.7.1 从文件中读取单个字符 156
8.7.2 从文件中读取字符串 158
8.7.3 从文件中读取数据块 159
8.7.4 从文件中格式化读取 160
8.8 写入文件 162
8.8.1 向文件写入单个字符 162
8.8.2 向文件写入字符串 163
8.8.3 向文件写入数据块 164
8.9 在任意位置访问硬盘 165
8.10 其他函数 167
8.10.1 确定文件大小 167
8.10.2 重置文件位置的另一种方法 169
8.11 小结 170

教学资源推荐
作者: [日]迈克尔·麦库尔(Michael McCool) [美]阿奇·D. 罗宾逊(Arch D. Robison) [美]仁达敬(James Reinders)著
作者: (美)John R.Hubbard
作者: 刘海燕 荆涛 主编 王子强 武卉明 杨健康 周睿 编著
作者: Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman
参考读物推荐
作者: 谢伟 编著
作者: 闫兴亚 张克发 等著
作者: (美)Jennifer Niederst Robbins 著
作者: 吴心锋 吴心松 李佩佩 编著