科技
类型
8.5
豆瓣评分
可以朗读
语音朗读
134千字
字数
2016-12-01
发行日期
展开全部
主编推荐语
指针是C语言的一项核心特性,对于指针的掌握程度是区分C语言新手与老手的重要标志。
内容简介
《深入理解C指针》专门研究指针,旨在提供比其他图书更全面和深入的C 指针和内存管理知识。全书巨细靡遗地为读者展现了C语言编程中最重要的话题:C的动态内存管理、指针和函数、指针和数组、指针和字符串、指针和结构体。作者还专门用一章篇幅讲解了安全问题和指针误用,让读者对指针的认识又深入一层。全书每章都穿插了使用指针的注意事项和潜在陷阱,及时贴心地提示读者在编程中避开此类问题。
目录
- 版权信息
- 版权声明
- O'Reilly Media, Inc.介绍
- 业界评论
- 前言
- 本书的不同之处
- 学习方法
- 目标读者
- 本书结构
- 小结
- 排版约定
- 使用代码
- Safari® Books Online
- 联系我们
- 第1章 认识指针
- 1.1 指针和内存
- 1.1.1 为什么要精通指针
- 1.1.2 声明指针
- 1.1.3 如何阅读声明
- 1.1.4 地址操作符
- 1.1.5 打印指针的值
- 虚拟内存和指针
- 1.1.6 用间接引用操作符解引指针
- 1.1.7 指向函数的指针
- 1.1.8 null的概念
- 1. 用不用NULL
- 2. void指针
- 3. 全局和静态指针
- 1.2 指针的长度和类型
- 1.2.1 内存模型
- 1.2.2 指针相关的预定义类型
- 1. 理解size_t
- 2. 对指针使用sizeof操作符
- 3. 使用intptr_t和uintptr_t
- 1.3 指针操作符
- 1.3.1 指针算术运算
- 1. 给指针加上整数
- 2. void指针和加法
- 3. 从指针减去整数
- 4. 指针相减
- 1.3.2 比较指针
- 1.4 指针的常见用法
- 1.4.1 多层间接引用
- 1.4.2 常量与指针
- 1. 指向常量的指针
- 2. 指向非常量的常量指针
- 3. 指向常量的常量指针
- 4. 指向“指向常量的常量指针”的指针
- 1.5 小结
- 第2章 C的动态内存管理
- 2.1 动态内存分配
- 内存泄漏
- 1. 丢失地址
- 2. 隐式内存泄漏
- 2.2 动态内存分配函数
- 2.2.1 使用malloc函数
- 1. 要不要强制类型转换
- 2. 分配内存失败
- 3. 没有给malloc传递正确的参数
- 4. 确认所分配的内存数
- 5. 静态、全局指针和malloc
- 2.2.2 使用calloc函数
- 2.2.3 使用realloc函数
- 2.2.4 alloca函数和变长数组
- 2.3 用free函数释放内存
- 2.3.1 将已释放的指针赋值为NULL
- 2.3.2 重复释放
- 2.3.3 堆和系统内存
- 2.3.4 程序结束前释放内存
- 2.4 迷途指针
- 2.4.1 迷途指针示例
- 2.4.2 处理迷途指针
- 2.4.3 调试器对检测内存泄漏的支持
- 2.5 动态内存分配技术
- 2.5.1 C的垃圾回收
- 2.5.2 资源获取即初始化
- 2.5.3 使用异常处理函数
- 2.6 小结
- 第3章 指针和函数
- 3.1 程序的栈和堆
- 3.1.1 程序栈
- 3.1.2 栈帧的组织
- 3.2 通过指针传递和返回数据
- 3.2.1 用指针传递数据
- 3.2.2 用值传递数据
- 3.2.3 传递指向常量的指针
- 3.2.4 返回指针
- 3.2.5 局部数据指针
- 3.2.6 传递空指针
- 3.2.7 传递指针的指针
- 实现自己的free函数
- 3.3 函数指针
- 3.3.1 声明函数指针
- 3.3.2 使用函数指针
- 3.3.3 传递函数指针
- 3.3.4 返回函数指针
- 3.3.5 使用函数指针数组
- 3.3.6 比较函数指针
- 3.3.7 转换函数指针
- 3.4 小结
- 第4章 指针和数组
- 4.1 数组概述
- 4.1.1 一维数组
- 4.1.2 二维数组
- 4.1.3 多维数组
- 4.2 指针表示法和数组
- 数组和指针的差别
- 4.3 用malloc创建一维数组
- 4.4 用realloc调整数组长度
- 4.5 传递一维数组
- 4.5.1 用数组表示法
- 4.5.2 用指针表示法
- 4.6 使用指针的一维数组
- 4.7 指针和多维数组
- 4.8 传递多维数组
- 4.9 动态分配二维数组
- 4.9.1 分配可能不连续的内存
- 4.9.2 分配连续内存
- 4.10 不规则数组和指针
- 4.11 小结
- 第5章 指针和字符串
- 5.1 字符串基础
- 5.1.1 字符串声明
- 5.1.2 字符串字面量池
- 字符串字面量不是常量的情况
- 5.1.3 字符串初始化
- 1. 初始化char数组
- 2. 初始化char指针
- 3. 从标准输入初始化字符串
- 4. 字符串位置小结
- 5.2 标准字符串操作
- 5.2.1 比较字符串
- 5.2.2 复制字符串
- 5.2.3 拼接字符串
- 5.3 传递字符串
- 5.3.1 传递简单字符串
- 5.3.2 传递字符常量的指针
- 5.3.3 传递需要初始化的字符串
- 5.3.4 给应用程序传递参数
- 5.4 返回字符串
- 5.4.1 返回字面量的地址
- 5.4.2 返回动态分配内存的地址
- 返回局部字符串的地址
- 5.5 函数指针和字符串
- 5.6 小结
- 第6章 指针和结构体
- 6.1 介绍
- 为结构体分配内存
- 6.2 结构体释放问题
- 6.3 避免malloc/free开销
- 6.4 用指针支持数据结构
- 6.4.1 单链表
- 6.4.2 用指针支持队列
- 6.4.3 用指针支持栈
- 6.4.4 用指针支持树
- 6.5 小结
- 第7章 安全问题和指针误用
- 7.1 指针的声明和初始化
- 7.1.1 不恰当的指针声明
- 7.1.2 使用指针前未初始化
- 7.1.3 处理未初始化指针
- 7.2 指针的使用问题
- 7.2.1 测试NULL
- 7.2.2 错误使用解引操作
- 7.2.3 迷途指针
- 7.2.4 越过数组边界访问内存
- 7.2.5 错误计算数组长度
- 7.2.6 错误使用sizeof操作符
- 7.2.7 一定要匹配指针类型
- 7.2.8 有界指针
- 7.2.9 字符串的安全问题
- 7.2.10 指针算术运算和结构体
- 7.2.11 函数指针的问题
- 7.3 内存释放问题
- 7.3.1 重复释放
- 7.3.2 清除敏感数据
- 7.4 使用静态分析工具
- 7.5 小结
- 第8章 其他重要内容
- 8.1 转换指针
- 8.1.1 访问特殊用途的地址
- 8.1.2 访问端口
- 8.1.3 用DMA访问内存
- 8.1.4 判断机器的字节序
- 8.2 别名、强别名和restrict关键字
- 8.2.1 用联合体以多种方式表示值
- 8.2.2 强别名
- 8.2.3 使用restrict关键字
- 8.3 线程和指针
- 8.3.1 线程间共享指针
- 8.3.2 用函数指针支持回调
- 8.4 面向对象技术
- 8.4.1 创建和使用不透明指针
- 8.4.2 C中的多态
- 8.5 小结
- 关于作者和封面上的鸟
- 关于作者
- 关于封面
展开全部
出版方
人民邮电出版社·图灵出品
图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。