深入理解C指针[试读]
1.1 指针和内存
C 程序员新手和老手的一大差别就在于是否对指针有深刻理解,能否高效利用指针。指针在C 语言中随处可见,也提供了极大的灵活性。指针为动态内存分配提供了重要支持,与数组表示法紧密相关,指向函数的指针也为程序中的流控制提供了更多的选择。 一直以来,指针都是学习C 语言的最大障碍。指针的基本概念很简单,就是一个存放内存地址的变量。然而,当我们开始应用指针操作符并试图看懂那些令人眼花缭乱的符号时,指针就开始变得复杂了。但情况并非总是如此,如果我们从简单的知识入手,打好扎实的基础,那么掌握指针的高级应用并不难。 理解指针的关键在于理解C 程序如何管理内存。归根结底,指针包含的就是内存地址。不理解组织和... 查看全部[ 1.1 指针和内存 ]
1.2 指针的长度和类型
如果考虑应用程序的兼容性和可移植性,指针长度就是一个问题。在大部分现代平台上,数据指针的长度通常是一样的,与指针类型无关,char 指针和结构体指针长度相同。尽管C 标准没有规定所有数据类型的指针长度相同,但是通常实际情况就是这样。不过,函数指针长度可能与数据指针长度不同。 指针长度取决于使用的机器和编译器。比如,在现代Windows 上,指针是32 位或64 位长。对于DOS 和Windows 3.1 来说,指针则是16 位或32 位长。 1.2.1 内存模型 64 位机器的出现导致为不同数据类型分配的内存在长度上的差异变得明显。不同的机器和编译器在给C 的基本数据类型分配空间上有... 查看全部[ 1.2 指针的长度和类型 ]
1.3 指针操作符
指针有几类操作符。目前我们已经接触过解引和取地址操作符,本节将近距离研究指针算术运算和比较。表1-4 总结了指针操作符。 表1-4:指针操作符 1.3.1 指针算术运算 数据指针可以执行以下几种算术运算: • 给指针加上整数; • 从指针减去整数; • 两个指针相减; • 比较指针。 函数指针则不一定。 1. 给指针加上整数 这种操作很普遍也很有用。给指针加上一个整数实际上加的数是这个整数和指针数据类型对应字节数的乘积。 各个系统的基本数据类型长度可能不同,正如1.2.1 节所述。表1-5 显示了大部分系统的常见长度,除非特别指定,本书的示例会使用这里的值。 ... 查看全部[ 1.3 指针操作符 ]
1.4 指针的常见用法
指针用处很多。在本节中,我们探讨指针的不同用法,包括: • 多层间接引用; • 常量指针。 1.4.1 多层间接引用 指针可以用不同的间接引用层级。把变量声明为指针的指针并不少见,有时候称它们为双重指针。一个很好的例子就是用传统的argv 和argc 参数来给main 函数传递程序参数,第5 章将详细讨论。 下例使用了三个数组。第一个数组是用来存储书名列表的字符串数组: char *titles[] = {"A Tale of Two Cities", "Wuthering Heights","Don Quixote&q... 查看全部[ 1.4 指针的常见用法 ]
1.5 小结
本章讨论了指针的基本概念,包括如何声明指针,在常见的场景中如何使用指针。我们也提到了null 的有趣概念和它的变种,还有一系列指针操作符。 我们知道了指针的长度是可变的,它取决于目标系统和编译器支持的内存模型。我们也探索了const 关键字和指针一起使用的问题。 有了这些基础知识,下一步就可以探讨那些指针可以大显身手的领域了。这些领域包括把指针作为函数参数、辅助创建数据结构,以及指针在动态内存分配中的应用。另外,我们也会看到指针如何让应用程序更安全。... 查看全部[ 1.5 小结 ]
书名: 深入理解C指针
作者: [美] Richard Reese
出版社: 人民邮电出版社
原作名: Understanding and using C pointers
译者: 陈晓亮
出版年: 2014-2
页数: 204
定价: 45.00
装帧: 平装
ISBN: 9787115344489