指针和引用的区别总结.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  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文档。上传文档
查看更多
指针和引用的区别总结

Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。 (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 Override(覆盖):是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。 (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。 特别注意 如果基类有某个函数的多个重载(overload)版本,而你在子类中重写(overwrite)了其中的一个,或是子类添加新的函数版本,则所有基类的重载版本都被遮蔽。所以,正常情况下,在子类中应重写基类中的所有重载版本。 具体地讲,继承类中的重载和重写都包含了重写的涵义,即只要函数名一样,基类的函数版本就会被遮蔽,所以,在派生类中要保持基类的重载版本,就应该 重写所有基类的重载版本。重载只在当当前类中有效,继承会失去重载的特性。也就是说,把基类的重载函数放在继承类里,就必须重写。 HYPERLINK /songyujin/archive/2006/03/14/350185.html 指针和引用的区别总结 从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变 2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域 3. 从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址 值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能 改。 怎样快速检测出一个巨大的单链表中是否具备死链及其位置 ? Sailor_forever? sailing_9806@163.com 转载请注明 HYPERLINK /sailor_8318/archive/2008/10/13/3066292.aspx /sailor_8318/archive/2008/10/13/3066292.aspx ? ? 汤姆逊的面试试题:怎么快速检测出一个巨大的单链表中是否具备死链及其位置? ? 先给出各种链表的定义:?? 循环链表(Circular?? Linked?? List)是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一点出发均可找到表中其他结点。?? ? 单链表是指表中的每个结点只包含一个指针域,除头结点外每个结点只有一个直接前驱,除最后一个结点外每个结点只有一个直接后继。? ? 死链:链表的某个节点的next指针指向了曾经出现过的接点或自己,导致链表死循环 死链的特点是必然不存在next域为NULL的节点。如果能事先知道链表长度或是所有链表节点可以遍历一遍检查一下就行了。 ? 如果你可以知道链表的长度,那么你遍历这个链表,每经过一个节点, ?长度减一,当长度为0,但链表还没有遍历完时, ?说明存在死链。时间效率恒定,未申请新空间 ? ? ××××××××××××××××××××××××××××××××××××××× 查找表比较 ? 如果没有任何其它信息,链表节点中又没有可以自由设置的域可以使用(如果有的话就可以设置访问标志了),可能就需要用一个查找表了。把所有访问过的节点指针放到一个查找表中,遍历链表直到next是NULL(无死链表)或是出现在查找表中(有死链)。效率是查找表的访问效率*N。比如用二分搜索树作为查找表效率就是(N*Log(N))——和排序同级 ? 由于死链可能存在于链表的任何位置,这样做就最坏的结果就是将链表遍历一遍(没有死链)有死链的话不用遍历完整个链表就可以找出来了 ? 问题在于事先不知道链表的长度,不能申请数组来保存地址啊,申请链表又要浪费大量的动态空间啊 ? 实际应用情况通常是知道链表的最大个数的,为了简单起见,tab定义为长度足够的数组,也可以建立一个链表。由于原则上链表接点的地址是没有规律的,所以依据地址表本身的其它快速(如二分等)算法似乎也不可行。 ? void?? *p[MAX]; 以p[0]为根,p保存的是各节点next的地

文档评论(0)

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

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

1亿VIP精品文档

相关文档