C++常见问题课件.pptVIP

C++常见问题课件.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共104页,可阅读全部内容。
  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文档。上传文档
查看更多

2024-8-12*在例6_10中,安排了這種懸掛所帶來的問題的示例程式。例6_10:delete對內存幹了什麼?smain6_10.cpplpszChar和lpszChar2指向了同一片動態記憶體空間,delete以後,記憶體的內容毫無意義,但是lpszChar和lpszChar2指針變數的值並沒有改變,還指向原來的位置。6.3動態記憶體管理技術2024-8-12*lpszChar2:屯屯屯屯屯屯屯屯葺葺葺葺葺葺lpszChar:屯屯屯屯屯屯屯屯葺葺葺葺葺葺lpszChar2:hello,China!lpszChar:hello,China!lpszChar2:葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺lpszChar:葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺lpszChar2:helloworld。lpszChar:helloworld。6.3動態記憶體管理技術2024-8-12*預防“指針懸掛”和“野指針”(此處“指針懸掛”和“野指針”是同義詞,都指指針指向不可用記憶體區域)從以下幾點入手:1、聲明指針時記住初始化,如不初始化就一定將其置成NULL.2、指針delete以後,一定記得將其置為NULL。3、當指針指向數組時,謹防指針操作越界.4、避免指針指向一個已經自動消失的局部變數。6.3動態記憶體管理技術2024-8-12*voidFunc(void){ char*lpszChar=newchar[100]; }//在退出函數時,動態記憶體會自動釋放嗎?6.3動態記憶體管理技術2024-8-12*退出Func()的時候,lpszChar會自動消失;而動態記憶體卻依然存在,沒有釋放,造成記憶體洩漏。1、指針消亡了,並不表示它所指向的動態記憶體會自動釋放了。2、動態記憶體釋放了,並不表示指向該動態記憶體的指針會消亡或自動變成NULL指針。6.3動態記憶體管理技術2024-8-12*6.4使用引用引用(),就是給一個變數取別名。使用“引用”就是使用“被引用對象”本身它不需要建立臨時對象,傳遞效率較高。6.4.1引用類型intiA,iB;intriA=iA;//intriA=iB;//錯誤,引用是固定的。riA是iA的同義詞,它們表示同一個對象。2024-8-12*riA是iA的一個引用;iA是一般變數,它是被引用的對象。定義引用類型變數時必須初始化。引用只能引用一個固定的對象。初始化以後,引用關係就不可改變。對對象或對引用的任何操作都會影響到被引用對象本身。一個引用可看作一個特殊類型的指針。6.4使用引用2024-8-12*1指針引用C中,改變指針本身——採用傳指針地址的方式.voidFunc(int**ppInt);intiNum=47;int*pInt=iNum; //表示取一般變數的地址Func(pInt); //表示取指針變數的地址6.4使用引用2024-8-12*利用指針引用傳遞指針值。C++中,可以採用引用來完成。函數參數變成指針的引用,用不著取得指針的地址。voidNewMemory3(char*lpszChar,intiNum){ lpszChar=newchar[iNum]; if(NULL==lpszChar) { cout記憶體分配失敗endl; exit(0); }}6.4使用引用2024-8-12*voidTest3(void){ char*lpszStr=NULL; NewMemory3(lpszStr,100); strcpy(lpszStr,hello,world.); coutlpszStrendl; deletelpszStr;}傳遞動態記憶體(用戶定義函數)6.4使用引用2024-8-12*6.4.1.2使用引用的限制使用引用時注意兩點:1、引用必須初始化。2、引用在初始化中被綁定到某個對象上後,將只能永遠綁定這個對象。不可空引用6.4使用引用2024-8-12*引用的效能:1、引用主要用於函數參數傳遞,解決大塊數據或對象的傳遞效率和空間效率問題。2、用引用傳遞函數參數,不產生副本,提高傳遞效率,通過const的使用,保證了引用傳遞的安全性。3、引用與指針的區別:指針通過某個指針變數指向一個對象後,對它所指向的變數間接操作。指針使程式可讀性差

文档评论(0)

157****3839 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档