再论论指针分析和总结.docxVIP

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 10 再再论指针 指针是 C 语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是 C 语言一把无可替代的利器,凭着这把利器,C 语言与其它高级语言相比至少在效率方面高人一筹。但是,由于指针的原理与使用方式跟人们通常 的思维习惯有较大的差别,造成了指针比 C 语言其它概念难理解得多,这使得对指针认识不足成为了一种在 C 程序员中普遍存在的现象,这种不足必然导致程序员在指针的使用过程中不断遭受挫折,挫折多了,指针俨然变成一道无法逾越的难关,恐惧感也就油然而生了。在恐惧感面前,某些程序员甚至产生了要避免使用指针的念头,这是非常不可取的。指针是 如此犀利,正是它才使得C 语言威猛无比,如果就这样把它放弃了,那么C 语言就算是白学了。我们应当让指针成为你手中那把砍掉索伦手指上魔戒的举世无双的纳西尔圣剑,而不 是成为你心中永远的魔戒。 本文的目的,是希望通过跟各位朋友一起讨论关于指针的几个关键概念及常见问 题,以加深对指针的理解。因此,本文并不是讲述形如int *p、struct {int i;float j;} *p 等这些东西是什么的文章,阅读本文的朋友最好对指针已经具有一定的使用经验,正因如此,笔者才给文章起名叫《再再论指针》。笔者不敢奢望能够完全解开你心中的魔结,但如果通过阅读本文,能够让你在日后的指针使用过程中减少失误,那笔者就心满意足了。本文将讨论如下十个主题,读者最好按主题的顺序一个一个地阅读,当然,如果你只对其中某个或某几个主题感兴趣,只看那几个也未尝不可。 当你阅读本文后: 如果你有不同的意见,欢迎你在评论里留下自己的见解,笔者很乐意跟你一起讨论, 共同进步。 如果你觉得我说的全都是废话,那么恭喜你,你的指针已经毕业了。 如果你有太多不明白的地方,那么我介绍你先找一些关于数组与指针的读物看看, 笔者推荐你阅读一本叫《C 与指针》的书,看完后再回来继续思考你的问题。 目录 1、什么是数组名? 一个让你吃惊的事实! 2、再一次吃惊! 数组的数组与多维数组的区别 3、数组的解剖学 4、[ ]运算符的本质 5、指向数组的指针 6、“另类”数组 7、C 语言声明详解 8、右左法则 复杂指针解析 9、指针与 const 10、围绕 p()与(*p)()的争论 11、《再再论指针》后记 第一章 什么是数组名? 一个让你吃惊的事实! 数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字: “一维数组是一级指针” “二维数组是二级指针” “数组名可以作为指针使用” “数组名就是 的常量指针” “数组名就是 的指针常量” 这些文字看起来非常熟悉吧?类似的文字还有许多,或许你就是经常说这些话的人呢。不过 非常遗憾,这些文字都是错误的,实际上数组名永远都不会是指针!这个结论也许会让你震 惊,但它的确是事实。数组名、指针、地址这几个概念虽然是基础中的基础,但它们恰恰是被混淆和滥用得最多的概念,把数组名说成指针,是一个概念性的错误,实质是混淆了指针 与地址两个概念的本质。俗话说得好:浅水淹死人。因此,在讨论数组之前,有必要先回过头来澄清一下什么是指针,什么是地址,什么是数组名。 指针是 C 语言具有低级语言特征的最直接的证据。在汇编语言里面,指针的概念随处可见。比如 SP,SP 寄存器又叫堆栈指针,它的值是地址,由于SP 保存的是地址,并且 SP 的值是不断变化的,因此可以看作一个变量,而且是一个地址变量。地址也是C 语言指针的值,C 语言的指针跟SP 这样的寄存器虽然不完全一样,但原理却是相通的。C 语言的指针也是一种地址变量,C89 明确规定,指针是一个保存对象地址的变量。这里要注意的是,指针跟地址概念的不同,指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值。 看到这里,也许你会觉得,这么简单的东西还用你来说吗?的确,对于p 与p 来说,99%的人都能在 0.1 秒内脱口而出谁是指针,谁是地址,但是,又有多少人在使用指针的过程中能够始终如一毫不动摇地遵循这两个概念呢?不少人使用指针的时候就会自觉或 不自觉地把指针和地址两个概念混淆得一塌糊涂了,数组名的滥用就是一个活生生的例子。这一点甚至连一些经典著作也没能避免。 不过也不能全怪你自己,笔者认为某些国内教材应该承担最大的责任。这些教材一开始就没有给读者好好地分清指针与地址的区别,相反还在讲述的过程中有意无意地混用这两个概念。更有甚者,甚至在书中明言指针就是地址!说这话的家伙最应该在 C 语言这个地图上抹掉,呵呵。两个月前我在购书中心随手翻开了某个作者主编的一本被冠以国家“十 五”规划重点研究项目的书,

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档