指针(大学FORTRAN程序课件).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十章 指针 ;10.1 指针的定义与使用 ;10.1.1 指针变量的定义格式 ;;10.1.2、指针变量的使用 ;;;;;(1) 指针变量赋值格式为: 指针变量=目标变量或者另一指针变量。 (2) 多个指针变量可以指向同一目标变量,但是,一个指针变量只能指向一个目标变量,不能同时指向多个目标变量。 (3) 指针变量与目标变量的类型应当严格一致,不存在所谓的兼容情况,即,整型指针变量所指的只能是整型变量,而不能是实型变量等。 (4) 指针变量的本质是所指变量的别名,两者在编译时会当作同一变量,指针变量的引用实际上是对目标变量的引用。 ;(5) 在程序中,指针变量通常有以下三种状态: ① 未定义状态,在程序开始时,所有的指针都处于这种状态。 ② 空状态,此时指针还没有作为任何对象的别名。 在程序中,有时为了方便起见,可以让指针指向一个空对象。其语句为: NULLIFY(指针变量???)。 ③ 关联状态,此时,指针已经作为其他对象的别名。 值得注意的是只有在第三种状态时,指针才能参与运算,否则,或者编译出错,或者非法操作。;10.2 动态变量 ; 例10.3 ;在该例中,先定义了一个指针变量P,然后利用ALLOCATE(P)函数,为P分配空间,再给P赋值。 必须注意的是:如果去掉ALLOCATE(P)语句,则该程序运行时会出现错误,因为指针在未指定目标时是虚的,不能引用。 一般而言,ALLOCATE函数总是与DEALLOCATE函数配套使用,因为用动态分配函数为指针分配存储单元时,容易产生指针悬挂问题。所谓指针悬挂问题是指:当一个对象被释放,而释放时没有直接涉及作为其别名的指针时,就产生指针悬挂,这时,指针所占据的内存单元始终得不到释放,使用DEALLOCATE函数就可释放存储单元。 注意,对于普通变量,由于其内存空间自动回收,不存在上述问题。 ;例10.4,ALLOCATE和DEALLOCATE函数的用法,程序如下:? PROGRAM POINTER4? INTEGER,POINTER::P1,P2 INTEGER S ALLOCATE(P1,P2) READ*,P1,P2 S=P1+P2 DEALLOCATE(P1,P2) PRINT*,S=,S END 输入5 6 输出S=11 ;该程序中,先定义了两个指针变量P1、P2,然后用ALLOCATE函数为其分配空间,再通过键盘输入其值,运算完毕,用DEALLOCATE函数,释放其空间。 必须注意的是:DELLOCATE函数所释放的空间,一定得是不再使用的动态空间,空间一旦被释放,就不得再使用,否则将产生非法操作,如上面程序中,如果将DEALLOCATE(P1,P2)语句提前,就会产生非法操作。 注意,即使用DEALLOCATE(P)函数,释放P所指的空间,也可能产生悬挂指针问题,下面我们看一个可能产生悬挂指针的例子。 ;REAL, POINTER :: P1, P2 ALLOCATE( P1 ) P1 = 13 P2 = P1 这时,P1,P2指向同一个存储单元,如果程序中在P1使用完后,用DEALLOCATE(P1)语句,这时,P2指针就被悬挂起来。 注意,ALLOCATE和DEALLOCATE还有可选用说明符STAT: ALLOCATE(P,STAT=IERR) DEALLOCATE(P,STAT=IERR) 其中IERR用于标识内存分配、解除是否成功,成功则IERR的值为0。 ;10.3 指针与数组 ;10.3.1 指针数组的定义 ; ;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; ;输入3 6,输出 3.00 6.00 9.00 -3.00 18.00 0.50;10.4 指针与链表 ;10.4.1 结点的定义 ; ;TYPE NODE INTEGER VALUE TYPE (NODE), POINTER :: NEXT END TYPE NODE 该结点包含两项,一项是数据本身,即INTEGER VALUE,另外一项是一个指向下一个结点的指针NEXT,通过TYPE (NODE), POINTER :: NEXT语句定义,该结点可以用图10.3表示: ;VALUE ;下面再看一个结构体定义的例子。 TYPE STUDENTNODE CHARACTER (15)NAME INTEGER NUM LOGICAL SEX CHARACTER (30)ADDRESS TYPE (STUDENTNODE),POINTER::NEXT END TYPE;图10.4 结点示意图

文档评论(0)

sanshengyuan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档