深入理解C指针和内存管理,提升编程效率!这是一本实战型图书,通过它,读者可以掌握指针动态操控内存的机制、对数据结构的增强支持,以及访问硬件等技术。本书详细阐述了如何在数组、字符串、结构体和函数中使用指针,同时演示了相应的内存模型及其对指针使用的影响。
指针为C语言带来了强大的功能和灵活性,却也是C语言中最难啃的一块“骨头”。本书旨在帮读者透彻理解指针,解决这个老大难问题。不论是初学者还是经验丰富的C/C++程序员和开发人员,都能从本书受益。
本书主要内容包括:
- 指针的基本概念及各种指针类型的声明;
- 学习动态内存分配、释放以及其他内存管理技术;
- 向函数传递数据和从函数返回数据;
- 理解数组和指针的关系;
- 如何通过指针使用字符串;
- 检查缓冲区溢出等指针安全问题;
- 理解不透明指针、有界指针、restrict关键字。
前言XI
第1章 认识指针1
1.1 指针和内存2
1.1.1 为什么要精通指针3
1.1.2 声明指针5
1.1.3 如何阅读声明6
1.1.4 地址操作符7
1.1.5 打印指针的值8
1.1.6 用间接引用操作符解引指针10
1.1.7 指向函数的指针10
1.1.8 null 的概念10
1.2 指针的长度和类型14
1.2.1 内存模型14
1.2.2 指针相关的预定义类型15
1.3 指针操作符18
1.3.1 指针算术运算19
1.3.2 比较指针23
1.4 指针的常见用法23
1.4.1 多层间接引用23
1.4.2 常量与指针24
1.5 小结29
第2章 C 的动态内存管理31
2.1 动态内存分配32
2.2 动态内存分配函数36
2.2.1 使用malloc 函数36
2.2.2 使用calloc 函数39
2.2.3 使用realloc 函数40
2.2.4 alloca 函数和变长数组42
2.3 用free 函数释放内存43
2.3.1 将已释放的指针赋值为NULL44
2.3.2 重复释放44
2.3.3 堆和系统内存45
2.3.4 程序结束前释放内存46
2.4 迷途指针46
2.4.1 迷途指针示例47
2.4.2 处理迷途指针48
2.4.3 调试器对检测内存泄漏的支持49
2.5 动态内存分配技术49
2.5.1 C 的垃圾回收50
2.5.2 资源获取即初始化50
2.5.3 使用异常处理函数51
2.6 小结52
第3章 指针和函数53
3.1 程序的栈和堆53
3.1.1 程序栈54
3.1.2 栈帧的组织55
3.2 通过指针传递和返回数据57
3.2.1 用指针传递数据57
3.2.2 用值传递数据58
3.2.3 传递指向常量的指针59
3.2.4 返回指针60
3.2.5 局部数据指针61
3.2.6 传递空指针62
3.2.7 传递指针的指针63
3.3 函数指针66
3.3.1 声明函数指针66
3.3.2 使用函数指针67
3.3.3 传递函数指针69
3.3.4 返回函数指针69
3.3.5 使用函数指针数组70
3.3.6 比较函数指针71
3.3.7 转换函数指针71
3.4 小结72
第4章 指针和数组75
4.1 数组概述76
4.1.1 一维数组76
4.1.2 二维数组77
4.1.3 多维数组78
4.2 指针表示法和数组78
4.3 用malloc 创建一维数组81
4.4 用realloc 调整数组长度82
4.5 传递一维数组85
4.5.1 用数组表示法85
4.5.2 用指针表示法86
4.6 使用指针的一维数组87
4.7 指针和多维数组89
4.8 传递多维数组91
4.9 动态分配二维数组94
4.9.1 分配可能不连续的内存94
4.9.2 分配连续内存95
4.10 不规则数组和指针96
4.11 小结99
第5章 指针和字符串101
5.1 字符串基础101
5.1.1 字符串声明102
5.1.2 字符串字面量池103
5.1.3 字符串初始化104
5.2 标准字符串操作108
5.2.1 比较字符串108
5.2.2 复制字符串109
5.2.3 拼接字符串 111
5.3 传递字符串114
5.3.1 传递简单字符串114
5.3.2 传递字符常量的指针116
5.3.3 传递需要初始化的字符串116
5.3.4 给应用程序传递参数118
5.4 返回字符串119
5.4.1 返回字面量的地址119
5.4.2 返回动态分配内存的地址120
5.5 函数指针和字符串122
5.6 小结124
第6章 指针和结构体125
6.1 介绍125
6.2 结构体释放问题128
6.3 避免malloc/free 开销131
6.4 用指针支持数据结构133
6.4.1 单链表134
6.4.2 用指针支持队列141
6.4.3 用指针支持栈143
6.4.4 用指针支持树145
6.5 小结148
第7章 安全问题和指针误用149
7.1 指针的声明和初始化150
7.1.1 不恰当的指针声明150
7.1.2 使用指针前未初始化151
7.1.3 处理未初始化指针151
7.2 指针的使用问题152
7.2.1 测试NULL153
7.2.2 错误使用解引操作153
7.2.3 迷途指针154
7.2.4 越过数组边界访问内存154
7.2.5 错误计算数组长度155
7.2.6 错误使用sizeof 操作符156
7.2.7 一定要匹配指针类型156
7.2.8 有界指针157
7.2.9 字符串的安全问题157
7.2.10 指针算术运算和结构体158
7.2.11 函数指针的问题160
7.3 内存释放问题161
7.3.1 重复释放162
7.3.2 清除敏感数据162
7.4 使用静态分析工具163
7.5 小结164
第8章 其他重要内容165
8.1 转换指针166
8.1.1 访问特殊用途的地址167
8.1.2 访问端口168
8.1.3 用DMA 访问内存169
8.1.4 判断机器的字节序169
8.2 别名、强别名和restrict 关键字170
8.2.1 用联合体以多种方式表示值171
8.2.2 强别名172
8.2.3 使用restrict 关键字173
8.3 线程和指针174
8.3.1 线程间共享指针175
8.3.2 用函数指针支持回调177
8.4 面向对象技术179
8.4.1 创建和使用不透明指针179
8.4.2 C 中的多态182
8.5 小结187
关于作者和封面188
MATLAB图像函数查询使用手册 本书特色 MATLAB图像处理工具箱是目前*流行的图像处理工具之一,其函数能有效地实现各种图像算法。本书从实用角度出发,详细介...
《无处安放的金钱》内容简介:随着中国城市化进程的加快,中国中产阶层的崛起,对于他们来说金融资产很重要。人生的幸福很大程度上
《实战数据库营销——大数据时代轻松赚钱之道》内容简介:《实战数据库营销》的主要内容包括什么是数据库营销、数据库营销的核心理
李永宏、马强、赵琦编著的《语言科学研究的MATLAB实现》主要讨论MATLAB的程序设计方法及其在语言科学研究中的初步应用,通过层次
本书是一本西方国家图案图集。书中集结了当代最有天赋的50为设计师的手绘图案设计作品,并且展示了他们如何将这些手绘图案创新性
《中医学教学医案选编》内容简介:本书是上海交通大学医学院2016年度课程、教材建设基金资助项目。以中医基础理论为核心,紧密结合
《Web入侵安全测试与对策》主要是为了向测试人员介绍一些用于测试Web应用程序的攻击方式,其中会包含一些恶意输入的典型例子,比
糖史(全二册),ISBN:9787539254845,作者:季羡林编著目录 目录《糖史》自序第一编国内编自序引言第一章飴餳餳餹第二章周秦至
《实用礼仪教程(第四版)》内容简介:本书对学生实际学习生活礼仪的各个方面,特别是按照学习生活的不同场景对形象礼仪规范及行为
《超越财务报告内部控制:中国经验》内容简介:本书在梳理与比较中美两国企业内部控制目标导向的历史演进过程、理论探讨不同目标导
《现代C:概念剖析和编程实践》内容简介:这本书按级别组织,编号从0到3。初始级别0,名为“邂逅”,它将总结使用C进行编程的基础知
《The Little SAS Boo(中文版)》内容简介:本书以大量实例、清晰简明的解释以及尽可能少的术语来介绍SAS语言,且大部分的功能均来
本书出自日本知名游戏公司万代南梦宫的资深开发人员之手,面向初级游戏开发人员,通过10个不同类型的游戏实例,展示了真正的游戏
《移动网络程序设计》详细阐述了如何在移动网络浏览器上构建高效和丰富的用户体验程序,以及各种离线应用程序或者微技程序,主要
Python机器学习 本书特色 机器学习与预测分析正在改变企业和其他组织的运作方式,本书将带领读者进入预测分析的世界。全书共13章,除了简要介绍机器学习及Pyt...
《浪花礼赞:汪氏现当代名人录》内容简介:本书主要辑录了现当代为国家建功立业而呕心沥血、殚精竭虑、鞠躬尽瘁、忠心耿耿、赤胆忠
《基因科技成果利益分享研究》内容简介:基因衍生科技成果,必须对人体组织提供者的利益作出恰当配置,方能保证研发的有序规范进行
MarkSummerfieldQtrac公司创始人,独立的培训讲师、顾问、技术编辑,Go、Python、C++、Qt和PyQt方面的技术作家。他的著作包括Rap
《这样读透一本书:给孩子的文学精读课》内容简介:上课是人生的展开,阅读是重新发现并真正拥有自己。本书是语文界新生代老师郭初
罗刚君编著的《ExcelVBA程序开发自学宝典(第2版)》是VBA入门的经典教材,对VBA的基础理论、语法规则、代码优化、编写思路、开发