【发布时间】:2017-08-16 11:01:02
【问题描述】:
模块中声明的整型变量作为全局变量来定义程序中相关数组的大小。程序的大小不同,所以数组的大小是一个变量而不是参数。它是在程序开始时确定的。
在下面的 sn-p 代码中,n 是全局大小变量。它在模块中声明并在主函数/程序的开头定义。主程序中n的类似用法和主程序中包含的子程序分别初始化一个数组。但是,主程序中的初始化导致错误:模块或主程序数组必须有恒定的形状错误,但子程序中的初始化有效。这种对不同位置使用的非常量值的不同处理背后的机制是什么?
module mod
implicit none
integer :: n
end module mod
program main
use mod
implicit none
integer :: b(n)
n = 5
b(:) = 1
print*, b(:)
call sub
contains
subroutine sub
integer :: a(n)
a = 10
print*, a
end subroutine sub
end program main
【问题讨论】:
-
在声明integer :: b(n)时n的值是未知的,所以你应该使用类似:integer, pointer : b(:); n = 5; allocate(b) 或整数,参数 :: nn = 5;整数 :: a(nn); n = nn