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

下载本文档

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

文档简介

1、第十章第十章 指针指针 10.1 10.1 指针的定义与运用指针的定义与运用本质:给一个变量起一个别名本质:给一个变量起一个别名一、一、 指针变量的定义格式指针变量的定义格式类型阐明,它表示该指针所指的目的变量类型。类型阐明,它表示该指针所指的目的变量类型。POINTERPOINTER为指针定义的关键字。为指针定义的关键字。类型阐明类型阐明, POINTER:指针变量名指针变量名1, 指针变量名指针变量名2, 例如例如: INTEGER,POINTER : A1, A2可以将类型阐明与指针阐明分开,例如:可以将类型阐明与指针阐明分开,例如:INTEGER A1,A2POINTER A1,A2指

2、针变量与目的变量的类型该当严厉一致指针变量与目的变量的类型该当严厉一致二、指针变量的运用二、指针变量的运用 P192 P192 例例10.1 10.1 指针变量例如指针变量例如1 1PROGRAM POINTER1PROGRAM POINTER1 INTEGER, POINTER:P ! INTEGER, POINTER:P !定义指针变量定义指针变量P P INTEGER, TARGET: X ! INTEGER, TARGET: X !定义整型变量定义整型变量X X READ READ* *, X, X P=X ! P=X !使使P P指向指向X X,这时两者实践上是同一个变量,这时两者实

3、践上是同一个变量 PRINT PRINT* *, X=, X, X=, X PRINT PRINT* *, P=, P, P=, PENDEND输入输入3输出结果为:输出结果为:X=3 P=3格式:指针变量格式:指针变量=目的变量或者另一指针变量。目的变量或者另一指针变量。P193 P193 例例10.2 10.2 指针变量例如指针变量例如2 2INTEGER, POINTER:P1, P2, P3, P4INTEGER, POINTER:P1, P2, P3, P4INTEGER,TARGET: X1, X2INTEGER,TARGET: X1, X2INTEGER X, S1, S2, S

4、3, S4, S5INTEGER X, S1, S2, S3, S4, S5READREAD* *, X1, X2, X1, X2X=X1X=X1* *X2X2P1=X1P1=X1P2=X2P2=X2P3=X1 ! P3=X1 ! 多个指针变量可以指向同一目的变量多个指针变量可以指向同一目的变量P4=P1 ! P4P4=P1 ! P4指向指向X1X1S1=P1S1=P1* *P2P2S2=P3S2=P3* *P2P2S3=P1S3=P1* *X2X2S4=P3S4=P3* *X2X2S5=P4S5=P4* *X2X2PRINTPRINT* *, X=, X, X=, XPRINT*,S1=,

5、S1PRINT*,S2=, S2PRINT*,S3=, S3PRINT*,S4=, S4PRINT*,S5=, S5END输入:输入:3 4输出:输出:X=12 S1=12 S2=12 S3=12 S4=12 S5=1210.2 10.2 动态变量动态变量 方法:先定义指针,再利用方法:先定义指针,再利用ALLOCATE(P)ALLOCATE(P)函数为其动函数为其动态分配空间,其中态分配空间,其中P P为指针变量。为指针变量。释放存储单元函数:释放存储单元函数:DEALLOCATE动态分配存储单元函数:动态分配存储单元函数:ALLOCATEP195 P195 例例10.4 ALLOCATE1

6、0.4 ALLOCATE和和DEALLOCATEDEALLOCATE函数的用法:函数的用法:PROGRAM POINTER4PROGRAM POINTER4 INTEGER,POINTER:P1,P2 ! INTEGER,POINTER:P1,P2 !定义指针变量定义指针变量P1P1、P2P2 INTEGER S INTEGER S ALLOCATE(P1,P2) ! ALLOCATE(P1,P2) !用用ALLOCATEALLOCATE函数为函数为P1,P2P1,P2分配空间分配空间 READ READ* *,P1,P2,P1,P2 S=P1+P2 S=P1+P2 DEALLOCATE(P1

7、,P2) ! DEALLOCATE(P1,P2) !用用DEALLOCATEDEALLOCATE函数释放空间函数释放空间 PRINT PRINT* *,S=,S,S=,SENDEND输入输入5 65 6输出输出S=11 S=11 10.3 10.3 指针与数组指针与数组 利用指针来指向一个数组,能动态地分配数组利用指针来指向一个数组,能动态地分配数组空间,给编程带来极大的方便。经过动态定义,可空间,给编程带来极大的方便。经过动态定义,可以根据当时运用空间的大小来生成空间,使数组大以根据当时运用空间的大小来生成空间,使数组大小满足要求。小满足要求。一、指针数组的定义一、指针数组的定义格式:格式:

8、类型阐明,类型阐明,DIMENSION(: :),POINTER:指针名指针名DIMENSION(: :): 数组的动态阐明标识,不指定数组下标界限数组的动态阐明标识,不指定数组下标界限“: 个数个数=数组维数数组维数POINTER:指针阐明标识。:指针阐明标识。例:例:REAL, DIMENSION(:), POINTER : X !声明指向一维实型数组的指针声明指向一维实型数组的指针XALLOCATE(X(20) !为为X数组分配数组分配20个单元的存储空个单元的存储空间间P197 P197 例例10.5 10.5 输入恣意两个数,将它们及四那么运输入恣意两个数,将它们及四那么运算结果存储

9、起来后输出。算结果存储起来后输出。分析:可以利用指针,定义一个动态数组分析:可以利用指针,定义一个动态数组X X,用来存,用来存放输入的数据和计算的结果,该数组的空间大小可放输入的数据和计算的结果,该数组的空间大小可以根据要存储的数据个数动态分配。以根据要存储的数据个数动态分配。REAL, DIMENSION(:), POINTER:X READ*, A, B C=A+B; D=A-B; E=A*B IF(B .NE. 0)THEN F=A/B ELSE F=0 ENDIF ALLOCATE(X(6) X(1)=A; X(2)=B; X(3)=C X(4)=D; X(5)=E; X(6)=F

10、WRITE(*, 100)X 100 FORMAT(1X, 3F8.2) DEALLOCATE(X)END输入输入3 6,输出:,输出:3.00 6.009.00-3.00 18.000.5010.4 10.4 指针与链表指针与链表 在链式存储中,每一个结点除了存储本人的信息以外,还在链式存储中,每一个结点除了存储本人的信息以外,还保管下一个值,用来访问下一个变量,这个值称为指针,下面保管下一个值,用来访问下一个变量,这个值称为指针,下面引见如何运用链表。引见如何运用链表。一、结点的定义一、结点的定义最简单的结点是普通数组的元素,如有以下定义:最简单的结点是普通数组的元素,如有以下定义:INT

11、EGER A(10) INTEGER A(10) 那么那么A(1)A(1)、A(2)A(2)、A(3)A(3)、A(4)A(4)等,可以看作结点。等,可以看作结点。 复杂的结点包含多种类型的数据,普通定义为一复杂的结点包含多种类型的数据,普通定义为一个构造体。个构造体。 下面是一个链表结点构造体的定义:下面是一个链表结点构造体的定义:TYPE NODE INTEGER VALUE !数据本身数据本身 TYPE (NODE), POINTER : NEXT !指向下一个结点的指针!指向下一个结点的指针NEXTEND TYPE NODEVALUENEXTP198 例:例:TYPE STUDENTN

12、ODE CHARACTER (15) NAME INTEGER NUM LOGICAL SEX CHARACTER (30) ADDRESS TYPE (STUDENTNODE), POINTER : NEXTEND TYPE二、链表的根本操作二、链表的根本操作链表的根本操作:建表、插入、删除、查找、更新、遍历等。链表的根本操作:建表、插入、删除、查找、更新、遍历等。P198 例例10.6 建立一个链表,并输出建表后的结果。建立一个链表,并输出建表后的结果。program ex_6implicit none type : nodeinteger : valuetype (node),point

13、er : nextend type node!链表的建立,以!链表的建立,以0作为建表终了作为建表终了type(node),pointer : current , Linteger : numread(*,*) numNULLIFY( L )!L指向一个空对象指向一个空对象allocate(current)current%value=numL=currentdo while (num/=0) read(*,*) num if(num/=0) then allocate(current) current%value=num current%next=L L=current end ifend d

14、o current=L !链表的输出过程链表的输出过程write(*,*) current%valuecurrent=current%nextdo while(associated(current)write(*,*)current%valuecurrent=current%nextend doend program ex_6AssociatedAssociated是是fortran90fortran90提供的内部函提供的内部函数,其作用是判别参数能否是关联形状,数,其作用是判别参数能否是关联形状,也就是指针能否曾经作为其他对象的别也就是指针能否曾经作为其他对象的别名。名。留意:链表有一个表头和一个表尾,由于留意:链表有一个表头和一个表尾,由于FORTRANFORTRAN言语中言语中指

温馨提示

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

评论

0/150

提交评论