【发布时间】:2015-03-22 14:19:51
【问题描述】:
我想将一个二维数组传递给一个子程序,并将这个数组视为一个一维参数。我试图以这种方式传递它: subroutine(array(1,:)).如果我明确定义数组,这将有效。但是,如果数组是可分配的,我会收到以下错误:“array”的实际参数必须是 ALLOCATABLE 我怎样才能做到这一点?
这是一些简短的示例代码,它给出了上面的错误:
program array
implicit none
integer,dimension(:,:),allocatable::i
allocate(i(2,2))
i(1,1)=1
call array_method(i(1,:))
contains
subroutine array_method(i)
implicit none
integer,allocatable,dimension(:),intent(in)::i
write(*,*) i(1)
end subroutine array_method
end program array
如果我将代码更改为明确定义的数组,如下所示,它可以工作。但是,我想用可分配的数组来做。
program array
implicit none
integer,dimension(2,2)::i
i(1,1)=1
call array_method(i(1,:))
contains
subroutine array_method(i)
implicit none
integer,dimension(2),intent(in)::i
write(*,*) i(1)
end subroutine array_method
end program array
如果我将子程序中的参数数组更改为可分配的,并将主程序中传递的参数保留为显式定义的数组(例如 (2,2)),我仍然会得到相同的错误。
【问题讨论】:
-
感谢 francescalus 的回答,我更新了我的问题
-
复习答案,主程序中可以使用
allocatable,子程序中不要指定即可。