《深入理解C指针》

基本信息

原书名:Understanding and using C pointers

作者: (美)Richard Reese

译者: 陈晓亮

丛书名: 图灵程序设计丛书

出版社:人民邮电出版社

ISBN:9787115344489

上架时间:2014-2-17

出版日期:2014 年2月

开本:16开

页码:1

版次:1-1

所属分类:计算机

更多关于》》》 《深入理解C指针》

编辑推荐

C程序员进阶必备经典

  透彻理解指针与内存管理

内容新颖,兼容C11标准

内容简介

书籍

计算机书籍

  指针是c 语言的一项核心特性,对于指针的掌握程度是区分c 语言新手与老手的重要标志。《深入理解c指针》专门研究指针,旨在提供比其他图书更全面和深入的c 指针和内存管理知识。全书巨细靡遗地为读者展现了c 语言编程中最重要的话题:c 的动态内存管理、指针和函数、指针和数组、指针和字符串、指针和结构体。作者还专门用一章篇幅讲解了安全问题和指针误用,让读者对指针的认识又深入一层。全书每章都穿插了使用指针的注意事项和潜在陷阱,及时贴心地提示读者在编程中避开此类问题。

  《深入理解c指针》适合c 和c++ 程序员和开发人员阅读,也可作为计算机专业学生学习c 语言的参考图书。

目录

《深入理解c指针》

前言  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  将已释放的指针赋值为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

关于作者和封面  188

本图书信息来源:互动出版

《深入理解C指针》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. linux删除特殊字符命名的文件

    今天在服务器上不小心创建了一个!命名的文件还有一个\命名的文件,本来想用转义字符进行删除,又担心误删了项目文件....最后找到最好的解决办法 如下: ls -i  查看文件inum值 执行删除inum ...

  2. centos6.5/6.3升级安装ImageMagick7.0.1-1

    线上论坛和应用程序的验证码功能都是使用的ImageMagick,但是版本比较老(centos yum安装的ImageMagick6.5.9).接到最新漏洞预报,紧急升级! ImageMagick图象处 ...

  3. 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp

    B - Byteland Trip 题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点 并且每 ...

  4. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  5. Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)

    题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数.不妨设\(tot\)为一个区间内\(1\)的个数.如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接 ...

  6. 复习一下xml(c)

    简单介绍 Using System.Xml; XMLDocument xml=new XmlDocument();xml.Load(path);//初始化一个实例 xml.Load(HttpConte ...

  7. python中%r和%s的区别

    %r用rper()方法处理对象 %s用str()方法处理对象 有些情况下,两者处理的结果是一样的,比如说处理int型对象. 例一: print "I am %d years old.&quo ...

  8. python opencv3 直线检测

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 import numpy as np # 读入图像 ...

  9. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  10. [SPOJ-LCS]Longest Common Substring

    题目大意: 求两个字符串的LCS. 思路: 对其中一个字符串构建SAM,然后用另一个字符串在里面匹配,按照SAM的边一直往下走,匹配到的连续的字符数就是公共字串的长度. #include<str ...