已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Copyright2008PearsonAddison-Wesley.Allrightsreserved.,Chapter9,PointersandDynamicArrays,Slide9-3,Overview,9.1Pointers9.2DynamicArrays,Copyright2008PearsonAddison-Wesley.Allrightsreserved.,9.1,Pointers,Slide9-5,Pointers,ApointeristhememoryaddressofavariableMemoryaddressescanbeusedasnamesforvariablesIfavariableisstoredinthreememorylocations,theaddressofthefirstcanbeusedasanameforthevariable.Whenavariableisusedasacall-by-referenceargument,itsaddressispassed,Slide9-6,PointersTellWhereToFindAVariable,AnaddressusedtotellwhereavariableisstoredinmemoryisapointerPointerspointtoavariablebytellingwherethevariableislocated,Slide9-7,DeclaringPointers,PointervariablesmustbedeclaredtohaveapointertypeExample:Todeclareapointervariablepthatcanpointtoavariableoftypedouble:double*p;Theasteriskidentifiespasapointervariable,Slide9-8,MultiplePointerDeclarations,Todeclaremultiplepointersinastatement,usetheasteriskbeforeeachpointervariableExample:int*p1,*p2,v1,v2;p1andp2pointtovariablesoftypeintv1andv2arevariablesoftypeint,Slide9-9,TheaddressofOperator,Thep1isnowapointertov1v1canbecalledv1orthevariablepointedtobyp1,Slide9-10,TheDereferencingOperator,C+usesthe*operatorinyetanotherwaywithpointersThephraseThevariablepointedtobypistranslatedintoC+as*pHerethe*isthedereferencingoperatorpissaidtobedereferenced,Slide9-11,v1and*p1nowrefertothesamevariable,APointerExample,v1=0;p1=output:4242,Slide9-12,PointerAssignment,Theassignmentoperator=isusedtoassignthevalueofonepointertoanotherExample:Ifp1stillpointstov1(previousslide)thenp2=p1;causes*p2,*p1,andv1alltonamethesamevariable,Somecareisrequiredmakingassignmentstopointervariablesp1=p3;/changesthelocationthatp1pointsto*p1=*p3;/changesthevalueatthelocationthat/p1pointsto,Slide9-13,Display9.1,Caution!PointerAssignments,Slide9-14,ThenewOperator,Usingpointers,variablescanbemanipulatedevenifthereisnoidentifierforthemTocreateapointertoanewnamelessvariableoftypeint:p1=newint;Thenewvariableisreferredtoas*p1*p1canbeusedanyplaceanintegervariablecancin*p1;*p1=*p1+7;,VariablescreatedusingthenewoperatorarecalleddynamicvariablesDynamicvariablesarecreatedanddestroyedwhiletheprogramisrunningAdditionalexamplesofpointersanddynamicvariablesareshowninAnillustrationofthecodeinDisplay9.2isseenin,Slide9-15,Display9.2,Display9.3,DynamicVariables,Slide9-16,newandClassTypes,UsingoperatornewwithclasstypescallsaconstructoraswellasallocatingmemoryIfMyTypeisaclasstype,thenMyType*myPtr;/createsapointertoa/variableoftypeMyTypemyPtr=newMyType;/callsthedefaultconstructormyPtr=newMyType(32.0,17);/callsMytype(double,int);,Slide9-17,BasicMemoryManagement,AnareaofmemorycalledthefreestoreisreservedfordynamicvariablesNewdynamicvariablesusememoryinthefreestoreIfallofthefreestoreisused,callstonewwillfailUnneededmemorycanberecycledWhenvariablesarenolongerneeded,theycanbedeletedandthememorytheyusedisreturnedtothefreestore,Slide9-18,ThedeleteOperator,Whendynamicvariablesarenolongerneeded,deletethemtoreturnmemorytothefreestoreExample:deletep;Thevalueofpisnowundefinedandthememoryusedbythevariablethatppointedtoisbackinthefreestore,Slide9-19,DanglingPointers,UsingdeleteonapointervariabledestroysthedynamicvariablepointedtoIfanotherpointervariablewaspointingtothedynamicvariable,thatvariableisalsoundefinedUndefinedpointervariablesarecalleddanglingpointersDereferencingadanglingpointer(*p)isusuallydisasterous,Slide9-20,AutomaticVariables,VariablesdeclaredinafunctionarecreatedbyC+anddestroyedwhenthefunctionendsThesearecalledautomaticvariablesbecausetheircreationanddestructioniscontrolledautomaticallyTheprogrammermanuallycontrolscreationanddestructionofpointervariableswithoperatorsnewanddelete,Slide9-21,GlobalVariables,VariablesdeclaredoutsideanyfunctiondefinitionareglobalvariablesGlobalvariablesareavailabletoallpartsofaprogramGlobalvariablesarenotgenerallyused,Slide9-22,TypeDefinitions,Anamecanbeassignedtoatypedefinition,thenusedtodeclarevariablesThekeywordtypedefisusedtodefinenewtypenamesSyntax:typedefKnown_Type_DefinitionNew_Type_Name;Known_Type_Definitioncanbeanytype,Slide9-23,DefiningPointerTypes,Toavoidmistakesusingpointers,defineapointertypenameExample:typedefint*IntPtr;Definesanewtype,IntPtr,forpointervariablescontainingpointerstointvariablesIntPtrp;isequivalenttoint*p;,Slide9-24,MultipleDeclarationsAgain,Usingournewpointertypedefinedastypedefint*IntPtr;Preventthiserrorinpointerdeclaration:int*P1,P2;/OnlyP1isapointervariablewithIntPtrP1,P2;/P1andP2arepointer/variables,Slide9-25,PointerReferenceParameters,AsecondadvantageinusingtypedeftodefineapointertypeisseeninparameterlistsExample:voidsample_function(IntPtr,Slide9-26,Section9.1Conclusion,CanyouDeclareapointervariable?Assignavaluetoapointervariable?Usethenewoperatortocreateanewvariableinthefreestore?WriteadefinitionforatypecalledNumberPtrtobeatypeforpointerstodynamicvariablesoftypeint?UsetheNumberPtrtypetodeclareapointervariablecalledmy_point?,Copyright2008PearsonAddison-Wesley.Allrightsreserved.,9.2,DynamicArrays,Slide9-28,DynamicArrays,Adynamicarrayisanarraywhosesizeisdeterminedwhentheprogramisrunning,notwhenyouwritetheprogram,Slide9-29,PointerVariablesandArrayVariables,ArrayvariablesareactuallypointervariablesthatpointtothefirstindexedvariableExample:inta10;typedefint*IntPtr;IntPtrp;VariablesaandparethesamekindofvariableSinceaisapointervariablethatpointstoa0,p=a;causesptopointtothesamelocationasa,Continuingthepreviousexample:PointervariablepcanbeusedasifitwereanarrayvariableExample:p0,p1,p9arealllegalwaystousepVariableacanbeusedasapointervariableexceptthepointervalueinacannotbechangedThisisnotlegal:IntPtrp2;/p2isassignedavaluea=p2/attempttochangea,Slide9-30,Display9.4,PointerVariablesAsArrayVariables,Slide9-31,CreatingDynamicArrays,NormalarraysrequirethattheprogrammerdeterminethesizeofthearraywhentheprogramiswrittenWhatiftheprogrammerestimatestoolarge?MemoryiswastedWhatiftheprogrammerestimatestoosmall?TheprogrammaynotworkinsomesituationsDynamicarrayscanbecreatedwithjusttherightsizewhiletheprogramisrunning,Slide9-32,DynamicarraysarecreatedusingthenewoperatorExample:Tocreateanarrayof10elementsoftypedouble:typedefdouble*DoublePtr;DoublePtrd;d=newdouble10;dcannowbeusedasifitwereanordinaryarray!,Thiscouldbeanintegervariable!,CreatingDynamicArrays,Pointervariabledisapointertod0Whenfinishedwiththearray,itshouldbedeletedtoreturnmemorytothefreestoreExample:deleted;ThebracketstellC+adynamicarrayisbeingdeletedsoitmustcheckthesizetoknowhowmanyindexedvariablestoremoveForgettingthebrackets,isnotlegal,butwouldtellthecomputertoremoveonlyonevariable,Slide9-33,Display9.5(1),Display9.5(2),DynamicArrays(cont.),Slide9-34,PointerArithmetic(Optional),ArithmeticcanbeperformedontheaddressescontainedinpointersUsingthedynamicarrayofdoubles,d,declaredpreviously,recallthatdpointstod0Theexpressiond+1evaluatestotheaddressofd1andd+2evaluatestotheaddressofd2Noticethataddingoneaddsenoughbytesforonevariableofthetypestoredinthearray,Slide9-35,PointerArthmeticOperations,YoucanaddandsubtractwithpointersThe+and-operatorscanbeusedTwopointersofthesametypecanbesubtractedtoobtainthenumberofindexedvariablesbetweenThepointersshouldbeinthesamearray!Thiscodeshowsonewaytousepointerarithmetic:for(inti=0;iarray_size;i+)cout*(d+i);/sameascoutdi;,Slide9-36,MultidimensionalDynamicArrays,Tocreatea3x4multidimensionaldynamicarrayViewmultidimensionalarraysasarraysofarraysFirstcreateaone-dimensionaldynamicarrayStartwithanewdefinition:typedefint*IntArrayPtr;Nowcreateadynamicarrayofpointersnamedm:IntArrayPtr*m=newIntArrayPtr3;Foreachpointerinm,createadynamicarrayofintsfor(inti=0;i3;i+)mi=newint4;,Slide9-37,m,IntArrayPtrs,ints,IntArrayPtr*,AMultidimensialDynamicArray,Thedynamicarraycreatedonthepreviousslidecouldbevisualizedliketh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年城区街道广告招牌题库
- 2026年国企社会招聘性格测试题及答案
- 2026年拖拉机科目一仿真考试题
- 2026年历史事件脉络与知识要点
- 2026年网格化服务管理资源整合知识题库
- 2026年医院医保政策执行情况考核办法
- 2026年基层干部退役军人服务保障政策测试题库
- 2026年互联网金融风险防控知识考核题库
- 2026年现代企业管理理论与实践应用考试题
- 2025年珠海市金湾区总工会招聘工会社会工作者考试试卷真题
- 2025江苏扬州市高邮市城市建设投资集团有限公司招聘拟聘用人员笔试历年参考题库附带答案详解
- 2026年上海安全员c证考试试题及答案
- 易制毒单位内部安全制度
- 2025年运城市人民医院招聘笔试真题
- (二模)石家庄市2026届普通高中高三毕业年级教学质量检测(二)数学试卷(含答案详解)
- 2026年西部计划志愿者招募考试题及答案
- √高考英语688高频词21天背诵计划-词义-音标-速记
- 2026高校毕业论文答辩模板
- 八年级劳动教育考试试题及答案
- 国家事业单位招聘2023中国艺术研究院招聘22人笔试历年参考题库典型考点附带答案详解
- 2026年医疗器械专业知识培训试题及答案
评论
0/150
提交评论