已阅读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年高级会计职称考试财务管理综合测试卷及答案
- 5万吨年高档阻燃剂装置、全厂公辅项目可行性研究报告模板-申批备案
- 2026年无人机驾驶员执照考试无人机飞行原理与气象知识模拟试卷及答案
- 北师大版高中物理高二下册第6章综合测试卷及答案
- 物业管理师资格考试服务提升试题集及答案解析及答案
- 医师资格考试社区医学专业知识模拟试卷及答案
- 2026年高考语文作文模拟试题及答案
- 网络营销师认证考试电子商务营销策划与执行策略习题集及答案
- 护士资格考试护理临床思维模拟试题及答案
- 北师大版数学 专题01 丰富的图形世界15考点复习指南(讲+练) 同步练习 含答案
- GB/T 19866-2026焊接工艺规程及评定的一般原则
- GB/T 48666-2026电子病历版式文档技术要求
- 2026年旋挖钻机操作手安全教育试卷及答案
- 2026年体育用品设备出租行业市场深度调研报告及未来五至十年技术路径与产业化前景
- 第三单元《多边形的面积》单元测试卷(含答案)2026-2027学年苏教版五年级数学上册
- 医学生基础医学重症肌无力查房课件
- 小小科学家《生物》模拟试卷(附答案)
- 无人机植保培训合同7篇
- Tesla:如何设计48V汽车?-2025-01-技术资料
- 《家禽养殖》课件
- 三年级数学应用题100道(含答案)
评论
0/150
提交评论