Fortran Coder

查看: 29244|回复: 10
打印 上一主题 下一主题

[指针] 关于fortran里指针的讨论

[复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2014-2-20 15:28:29 | 显示全部楼层
楼上说得没错,严谨和灵活往往不可兼得。

实际上,Fortran 的参数默认是传址的,一定程度上就是指针。所以语法层面上不使用指针也能完成很多事情。

而 C 的参数默认是传值的,如果语法层面上也不使用指针,很多事情就捉襟见肘。

我对指针还是抱有挺乐观的观点的,如果有大量数据的操作,合理应用指针可以提高程序执行效率。

但稍不熟练就容易造成内存里分配了数据,指针都指走了,导致占用内存而且无法使用,如果这样的情况出现在循环里,就是内存泄露,情况就遭了。

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1370 元
贡献
581 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2014-2-20 17:33:38 | 显示全部楼层
指向单变量的指针也是可以用的。

譬如,以前要相同的处理两个量。需要写两种可能,有了指针,只写一种就可以了。

[Fortran] 纯文本查看 复制代码
real :: rAmp , rPhz
if ( ... )
  call proc( rAmp )
  rAmp = func( rAmp )
  call write( rAmp )
else
  call proc( rPhz )
  rPhz = func( rPhz )
  call write( rPhz )
end if


用指针的话,可以很简单的写为:
[Fortran] 纯文本查看 复制代码
real , target :: rAmp , rPhz
real , pointer :: p
if ( ... )
  p => rAmp
else
  p => rPhz
end if
call proc( p )
p = func( p )
call write( p )


当然了,把那三句话写成子程序,用 rAmp 和 rPhz 分别做参数,也可以。但是相对还是麻烦些
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-14 21:09

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表