《Fortran指针》PPT课件_第1页
《Fortran指针》PPT课件_第2页
《Fortran指针》PPT课件_第3页
《Fortran指针》PPT课件_第4页
《Fortran指针》PPT课件_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章指针,10.1指针的定义与使用,实质:给一个变量起一个别名,一、指针变量的定义格式,类型说明,它表示该指针所指的目标变量类型。POINTER为指针定义的关键字。,类型说明,POINTER:指针变量名1,指针变量名2,例如:INTEGER,POINTER:A1,A2,可以将类型说明与指针说明分开,例如:INTEGERA1,A2POINTERA1,A2,指针变量与目标变量的类型应当严格一致,二、指针变量的使用,P192例10.1指针变量示例1PROGRAMPOINTER1INTEGER,POINTER:P!定义指针变量PINTEGER,TARGET:X!定义整型变量XREAD*,XP=X!使P指向X,这时两者实际上是同一个变量PRINT*,X=,XPRINT*,P=,PEND,输入3输出结果为:X=3P=3,格式:指针变量=目标变量或者另一指针变量。,P193例10.2指针变量示例2INTEGER,POINTER:P1,P2,P3,P4INTEGER,TARGET:X1,X2INTEGERX,S1,S2,S3,S4,S5READ*,X1,X2X=X1*X2P1=X1P2=X2P3=X1!多个指针变量可以指向同一目标变量P4=P1!P4指向X1S1=P1*P2S2=P3*P2S3=P1*X2S4=P3*X2S5=P4*X2PRINT*,X=,X,PRINT*,S1=,S1PRINT*,S2=,S2PRINT*,S3=,S3PRINT*,S4=,S4PRINT*,S5=,S5END输入:34输出:X=12S1=12S2=12S3=12S4=12S5=12,10.2动态变量,方法:先定义指针,再利用ALLOCATE(P)函数为其动态分配空间,其中P为指针变量。,释放存储单元函数:DEALLOCATE,动态分配存储单元函数:ALLOCATE,P195例10.4ALLOCATE和DEALLOCATE函数的用法:PROGRAMPOINTER4INTEGER,POINTER:P1,P2!定义指针变量P1、P2INTEGERSALLOCATE(P1,P2)!用ALLOCATE函数为P1,P2分配空间READ*,P1,P2S=P1+P2DEALLOCATE(P1,P2)!用DEALLOCATE函数释放空间PRINT*,S=,SEND输入56输出S=11,10.3指针与数组,利用指针来指向一个数组,能动态地分配数组空间,给编程带来极大的方便。通过动态定义,可以根据当时使用空间的大小来生成空间,使数组大小满足要求。,一、指针数组的定义,格式:类型说明,DIMENSION(:),POINTER:指针名,DIMENSION(:):数组的动态说明标识,不指定数组下标界限“:”个数=数组维数POINTER:指针说明标识。,例:REAL,DIMENSION(:),POINTER:X!声明指向一维实型数组的指针XALLOCATE(X(20)!为X数组分配20个单元的存储空间,P197例10.5输入任意两个数,将它们及四则运算结果存储起来后输出。,分析:可以利用指针,定义一个动态数组X,用来存放输入的数据和计算的结果,该数组的空间大小可以根据要存储的数据个数动态分配。,REAL,DIMENSION(:),POINTER:XREAD*,A,BC=A+B;D=A-B;E=A*BIF(B.NE.0)THENF=A/BELSEF=0ENDIFALLOCATE(X(6)X(1)=A;X(2)=B;X(3)=CX(4)=D;X(5)=E;X(6)=FWRITE(*,100)X100FORMAT(1X,3F8.2)DEALLOCATE(X)END,输入36,输出:3.006.009.00-3.0018.000.50,10.4指针与链表,在链式存储中,每一个结点除了存储自己的信息以外,还保留下一个值,用来访问下一个变量,这个值称为指针,下面介绍如何使用链表。,一、结点的定义,最简单的结点是普通数组的元素,如有以下定义:INTEGERA(10)则A(1)、A(2)、A(3)、A(4)等,可以看作结点。,复杂的结点包含多种类型的数据,一般定义为一个结构体。,下面是一个链表结点结构体的定义:,TYPENODEINTEGERVALUE!数据本身TYPE(NODE),POINTER:NEXT!指向下一个结点的指针NEXTENDTYPENODE,P198例:TYPESTUDENTNODECHARACTER(15)NAMEINTEGERNUMLOGICALSEXCHARACTER(30)ADDRESSTYPE(STUDENTNODE),POINTER:NEXTENDTYPE,二、链表的基本操作,链表的基本操作:建表、插入、删除、查找、更新、遍历等。,P198例10.6建立一个链表,并输出建表后的结果。,programex_6implicitnonetype:nodeinteger:valuetype(node),pointer:nextendtypenode!链表的建立,以0作为建表结束type(node),pointer:current,Linteger:numread(*,*)numNULLIFY(L)!L指向一个空对象allocate(current)current%value=numL=current,dowhile(num/=0)read(*,*)numif(num/=0)thenallocate(current)current%value=numcurrent%next=LL=currentendifenddocurrent=L!链表的输出过程write(*,*)current%valuecurrent=current%nextdowhile(associated(current)write(*,*)current%valuecurrent=current%nextenddoendprogramex_6,Associated是fortran90提供的内部函数,其作用是判断参数是否是关联状态,也就是指针是否已经作为其他对象的别名。,注意:链表有一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论