05 第五章 指针与数组 C语言程序设计 第二版.pdf

05 第五章 指针与数组 C语言程序设计 第二版.pdf

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
05 第五章 指针与数组 C语言程序设计 第二版.pdf

C语言程序设计 第五章 指针与数组 第5章 指针与数组 指针是一种保存变量地址的变量。在 C 语言中,指针的使用非常广泛,原因之一是,指 针常常是表达某个计算的惟一途径,另一个原因是,同其它方法比较起来,使用指针通常可 以生成更高效、更紧凑的代码。指针与数组之 的关系十分密切,我们将在 章中讨论它们 之 的关系,并探讨如何利用这种关系。 指针和goto 语句一样,会导致程序难以理解。如果使用者粗心,指针很容易就指向了错 误的地方。但是,如果谨慎地使用指针,便可以利用它写出简单、清晰的程序。在 章中我 们将尽力说明这一点。 ANSI C 的一个最重要的变化是,它明确地制定了操 指针的规 。事实上,这些规 已 经被很多优秀的程序设计人员和编译器所采纳。此外,ANSI C 使用类型void * (指向void 的指针)代替char *作为通用指针的类型。 5.1. 指针与地址 首先,我们通过一个简单的示意图来说明内存是如何组织的。通常的 器都有一系列连 续编号或编址的存储单元,过些存储单元可以单个进行操 ,也可以以连续成组的方式操 。 通常情况下, 器的一个字节可以存放一个char类型的数据,两个相邻的字节存储单元可存 储一个short (短整型)类型的数据,而4 个相邻的字节存储单元可存储一个long (长整型) 类型的数据。指针是能够存放一个地址的一组存储单元 (通常是两个或4 个字节)。因此,如 果c 的类型是char,并且p 是指向c 的指针, 可用图5-1 表示它们之 的关系: 图5- 1 一元运算符可用于取一个对象的地址,因此,下列语句: p = c; 将把c 的地址赋值给变量p,我们称p 为 “指向”c 的指针。地址运算符只能应用于内存中 的对象,即变量与数组元素。它不能作用于表达式、常量或register类型的变量。 一元运算符*是 接寻址或 接引用运算符。当它作用于指针时,将访问指针所指向的对 象。我们在这里假定x 与y 是整数,而 ip 是指向int 类型的指针,下面的代码段说明了如 何在程序中声明指针以及如何使用运算符和*: int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to int */ By阴风 共 275 页 第 75 页 C语言程序设计 第五章 指针与数组 ip = x; /* ip now points to x */ y = *ip; /* y is now 1 */ *ip = 0; /* x is now 0 */ ip = z[0]; /* ip now points to z[0] */ 变量x、y 与z 的声明方式我们已经在前面的章节中见到过。我们来看指针ip 的声明, 如下所示: int *ip; 这样声明是为了便于记忆。该声明语句表明表达式*ip 的结果是int 类型。这种声明变量的 语法与声明该变量所在表达式的语法类似。同样的原因,对函数的声明也可以采用这种方式。 例如,声明 double *dp,atof (char *); 表明,在表达式中,*dp和atof(s)的值都是double类型,且atof 的参数是一个指向char 类型的指针。 我们应该注意,指针只能指向某种特定类型的对象,也就是说,每个指针都必须指向某 种特定的数据类型。(一个例外情况是指向void 类型的指针可以存放指向任何类型的指针, 但它不能 接引用其自身。我们将在5.11 节中详细讨论该问题)。 如果指针ip指向整型变量,那么在x 可以出现的任何上下文中都可以使用*ip,因此, 语句

文档评论(0)

cai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档