保留内在分配中的分配界限

Ste*_*ein 5 arrays fortran

我使用分配时的自动分配来计算两个数组的差异,边界从 0 开始:

program main
   implicit none
   integer, allocatable :: a(:), b(:), c(:)

   allocate(a(0:10))
   allocate(b(0:10))

   a = 1
   b = 2

   write (*,*) lbound(a)
   write (*,*) lbound(b)

   c = b - a

   write (*,*) lbound(c)
end program main
Run Code Online (Sandbox Code Playgroud)

gfortran 和 ifort 都给出输出:

       0
       0
       1
Run Code Online (Sandbox Code Playgroud)

为什么 c 与 a 和 b 的界限不同?是否有一种简短(没有显式分配)的方法来确保 c 具有相同的界限?

Vla*_*r F 3

为什么 c 不具有与 a 和 b 相同的界限?

a因为它应该被分配到与and相同的形状,b并且从右侧表达式的下界开始。这b-a是一个表达式,它从 1 开始,任何数组算术运算的结果都将这样开始。如果ba从不同的索引开始怎么办?)

是否有一种简短(没有显式分配)的方法来确保 c 具有相同的界限?

不。但您至少可以使用mold=a或显式分配source=a