0321537904_ppt73679-0321537904_pptSavitch_ch_09_第1页
0321537904_ppt73679-0321537904_pptSavitch_ch_09_第2页
0321537904_ppt73679-0321537904_pptSavitch_ch_09_第3页
0321537904_ppt73679-0321537904_pptSavitch_ch_09_第4页
0321537904_ppt73679-0321537904_pptSavitch_ch_09_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论