| 今天看Fortran动态数组相关问题的时候遇到了一些问题。1、写代码的时候,如果直接定义integer::m=5,下一行写real*8 a(m),那编译将无法通过;但是如果在一个subroutine里,这个m作为子程序的输入参数传进来,在 integer::m后,可以下一行跟real*8 a(m),能成功编译,请问都是变量,为什么第一种形式不能编译,而第二种可以。
 2、在后续作测试的时候发现,把一个数组a(大小为m,即5,初始化后里面为5个0.0)传入subroutine后,我在subroutine定义real,dimension(n)::a时,手滑将n达成了
 阿拉伯数字的1,即real,dimension(1)::a,可程序仍可以正常编译,运行exe之后仍能输出正常的结果。代码如下,请大家不吝赐教,谢谢了!
 
 [Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode 
Program main
    implicit none   
    integer::m=5
    call dyaraayini(m) 
end
Subroutine dyaraayini(n)
    implicit none
    integer n,i
    real dya(n)
    do i=1,n
        dya(i)=0.0
    end do
    write(*,*)dya
    call arraytest(dya,n)
    write(*,*)dya
end 
Subroutine arraytest(a,n)
    implicit none
    integer i,n
    real,dimension(1)::a
!    real,dimension(n)::a
    do i=1,n
        a(i)=1+i
    end do
end
 
 
 
 
 |