深入理解c指针 ---目录

第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 将已释放的指针赋值为NULL	44
		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 测试NULL	153
		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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值