《数组和指针概念的联系与区分的经典文档.docVIP

《数组和指针概念的联系与区分的经典文档.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数组和指针概念的联系与区分的经典文档

第一章 数组与指针概念剖析 数组与指针生来就是双胞胎,多数人就是从数组的学习开始指针的旅程的。在学习的过 程中,很自然就会经常听到或见到关于数组与指针的各种各样的看法,下面我节选一些 在各种论坛和文章里经常见到的文字: “一维数组是一级指针” “二维数组是二级指针” “数组名是一个常量指针” “数组名是一个指针常量” ........................ 这些文字看起来非常熟悉吧?类似的文字还有许多。不过非常遗憾,这些文字都是错误 的,实际上数组名永远都不是指针!这个结论也许会让你震惊,但它的确是事实。但是, 在论述这个问题之前,首先需要解决两个问题:什么是指针?什么是数组?这是本章的 主要内容,数组名是否指针这个问题留在第二章进行讨论。看到这里,也许有人心里就 会嘀咕了,这么简单的问题还需要说吗?int *p, a[10];不就是指针和数组吗?但是, 笔者在过往的讨论过程中,还真的发现有不少人对这两个概念远非清晰,这会妨碍对后 面内容的理解,所以还是有必要先讨论一下。 什么是指针?一种普遍存在的理解是,把指针变量理解成就是指针,这种理解是片面的, 指针变量只是指针的其中一种形态,但指针并不仅仅只有指针变量。一个指针,包含了 两方面的涵义:实体(entity)和类型。标准是这样描述指针类型的: 6.2.5 Types A pointer type may be derived from a function type, an object type, or an incomplete type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’. 请留意第二句所说的内容:指针类型描述了这样一个对象,其值为对某种类型实体的引 用。标准在这里所用的措词是指针类型描述了一个对象。 再来看看标准关于取址运算符的规定: 6.5.3.2 Address and indirection operators Semantics The unary operator returns the address of its operand. If the operand has type “type”, the result has type “pointer to type”....... Otherwise, the result is a pointer to the object or function designated by its operand. 这个条款规定,运算符的结果是一个指针。但问题是,表达式的结果不是对象!标准 自相矛盾了吗?当然不是,这说明的是,指针的实体有对象与非对象两种形态。 我们常说的指针变量只是指针实体的对象形态,但对象与非对象两种形态合起来,才是 指针的完整涵义,就是说,无论是否对象,只要是一个具有指针类型的实体,都可以称 之为指针,换言之,指针不一定是对象,也不一定是变量。后一种情况,指的是当需要 产生一个指针类型的临时对象时,例如函数的传值返回或者表达式计算产生的中间结 果,由于是一个无名临时对象,因此不是变量。 在C++中,由于引入了OOP,增加了一种也称为“指针”的实体:类非静态成员指针,虽然 也叫指针,但它却不是一般意义上的指针。C++标准是这样说的: 3.9.2 Compound types ....... Except for pointers to static members, text referring to “pointers” does not apply to pointers to members.......... 接下来,该谈谈数组了。数组是一种对象,其对象类型就叫数组类型。但笔者发现有个 现象很奇怪,有些人根本没有数组类型的意识,不过也的确有些书并没有将数组作为一 个类型

文档评论(0)

wu12youli + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档