如果阵列等级/大小可用,是否有任何理由使用假定大小的数组?

Pat*_*nan 0 arrays fortran multidimensional-array fortran90

如果我知道传递给函数或子例程的数组的等级和/或大小,是否有任何理由使用假定形状或假定大小的数组?例如,如果我可以替换

function f(a,m,n)
   real,dimension(*),intent(inout) :: a
   ! ...
end function
Run Code Online (Sandbox Code Playgroud)

function f(a,m,n)
    real,dimension(m,n),intent(inout) :: a
    ! ...
end function
Run Code Online (Sandbox Code Playgroud)

是否有任何理由(在Fortran 90或更高版本中)不这样做?

Hig*_*ark 5

评论太久了,答案不是很多......

这个

function f(a,m,n)
    real,dimension(m,n),intent(inout) :: a
    ! ...
end function
Run Code Online (Sandbox Code Playgroud)

它不是a一个假定形状的数组,它有明确的形状(m,n).这几天我写

function f(a)
    real,dimension(:,:),intent(inout) :: a
    ! ...
end function
Run Code Online (Sandbox Code Playgroud)

在这个版本a肯定是假设形状.在(越来越)罕见的情况下,我需要在一个过程中的数组的大小或形状,我通过写shape(a)或类似的方式得到它.

最后,要回答OP的问题,请参考假设大小数组:冒号与星号 - DIMENSION(:) arr与arr(*)