Fortran Coder

查看: 14118|回复: 6
打印 上一主题 下一主题

[Module] MODULE 中使用动态数组

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
跳转到指定楼层
楼主
发表于 2016-5-22 22:25:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 一磅缘 于 2016-5-23 09:43 编辑

请教各位一个问题:      
本人编写的程序需要设置多层子程序,按之前实数组,及虚数组的设置,需要在各层子程序名中注明调用的数组(实数组),很不方便,module貌似具有类似的功能。
但问题是我传递的很多多维数组是根据读入的初始变量决定其大小的,因此:
可否在module中定义动态数组,继而在每个子程序中USE module,或者有没例子?


非常感谢

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2

帖子

1

主题

0

精华

新人

F 币
23 元
贡献
11 点
沙发
 楼主| 发表于 2016-5-23 09:39:19 | 只看该作者
自己补充下:
本人想实现MODULE中定义数组,方便每个子程序直接调用(子程序名可大大简化);
MODULE数组中的值应该是随着调用的进行可以更新。

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
板凳
发表于 2016-5-23 17:53:36 | 只看该作者
第一种,子程序和动态数组放在同一模块
[Fortran] 纯文本查看 复制代码
module m 
integer,allocatable::n(:)
contains 
! 分配
subroutine sub1
allocate(n(3))
end subroutine

! 赋值
subroutine sub2
n=[1,2,3]
end subroutine

! 使用
subroutine sub3
integer i
i=n(2)
print*,i
end subroutine

! 释放
subroutine sub4
deallocate(n)
end subroutine
end module 

program test
use m
call sub1
call sub2
call sub3
call sub4
end 

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
地板
发表于 2016-5-23 17:55:08 | 只看该作者
本帖最后由 li913 于 2016-5-23 17:56 编辑

第二种,子程序和数组不在同一模块
[Fortran] 纯文本查看 复制代码
module m 
integer,allocatable::n(:)
end module 

program test
call sub1
call sub2
call sub3
call sub4
end 
! 分配
subroutine sub1
use m
allocate(n(3))
end subroutine

! 赋值
subroutine sub2
use m
n=[1,2,3]
end subroutine

! 使用
subroutine sub3
use m
integer i
i=n(2)
print*,i
end subroutine

! 释放
subroutine sub4
use m
deallocate(n)
end subroutine


490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

5#
发表于 2016-5-23 19:26:30 | 只看该作者
如果lz已经看过彭国伦的书,那么请深入阅读面向对象OOP编程的资料,多层次函数调用无法巧妙而优雅滴绕开OOP编程

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

6#
发表于 2016-5-23 19:28:09 | 只看该作者
li913 发表于 2016-5-23 17:55
第二种,子程序和数组不在同一模块
[mw_shl_code=fortran,true]module m
integer,allocatable::n(:)

动态数组不做任何检查,上手就分配、赋值和释放的话,很容易栽跟头。。。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

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

7#
发表于 2016-5-23 22:16:21 | 只看该作者
竹叶的意思只是解释如何使用module中的动态数组,并没有引入太多其他情况的分辨。
(对于新手来说,一下子引入太多,反而难以接受)

确实在module里,由于函数可能被调用多次,通常需要进行 allocated 之类的判断。会更安全。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-26 13:35

Powered by Tencent X3.4

© 2013-2024 Tencent

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