首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在子例程中传递数组

在子例程中传递数组
EN

Stack Overflow用户
提问于 2017-06-06 16:37:44
回答 1查看 75关注 0票数 0

如果子程序中有以下代码(thanks to M. Chinoune)

代码语言:javascript
复制
type :: vector
    integer, dimension(:), allocatable :: elements
end type vector

type :: ragged_array
    type(vector), dimension(:), allocatable :: vectors
end type ragged_array

type(ragged_array) :: raggar

allocate( raggar%vectors(2) )
allocate( raggar%vectors(1)%elements(3) )
allocate( raggar%vectors(2)%elements(4) )

raggar%vectors(1)%elements=0 
raggar%vectors(2)%elements=0 

如果我想在另一个子程序中传递raggar以修改raggar的大小。我是否应该这样做:

代码语言:javascript
复制
CALL MySubroutine(raggar)

代码语言:javascript
复制
CALL MySubroutine(raggar%vectors%elements)

然后,在我的子程序中,我如何声明它?

代码语言:javascript
复制
SUBROUTINE MySubroutine(raggar)
type :: vector
    integer, dimension(:), allocatable :: elements
end type vector

type :: ragged_array
    type(vector), dimension(:), allocatable :: vectors
end type ragged_array

type(ragged_array), INTENT(INOUT):: raggar

我做了很多尝试,但我总是遇到错误,例如:

The type of the actual argument differs from the types of the dummy argument.

the shape matching rules of actual arguments and dummy argument have been violated

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 17:37:42

将类型定义放入模块中,并在程序和子程序中使用。

代码语言:javascript
复制
module my
type :: vector
    integer, dimension(:), allocatable :: elements
end type vector

type :: ragged_array
    type(vector), dimension(:), allocatable :: vectors
end type ragged_array
end module

program probe
use my
type(ragged_array) :: ragarr
allocate( ragarr%vectors(2) )
allocate( ragarr%vectors(1)%elements(3) )
allocate( ragarr%vectors(2)%elements(4) )
ragarr%vectors(1)%elements=0 
ragarr%vectors(2)%elements=0 
CALL MySubroutine(ragarr)
end program

SUBROUTINE MySubroutine(rr)
use my
type(ragged_array), INTENT(INOUT):: rr
end subroutine
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44395450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档