gpt4 book ai didi

arrays - Fortran中0大小数组的数组边界

转载 作者:行者123 更新时间:2023-12-01 12:09:21 25 4
gpt4 key购买 nike

在 Fortran 中分配零大小的数组时,我得到了违反直觉的行为。

这段代码:

program test_zerosized
implicit none
integer, allocatable :: a(:),b(:)
allocate(a(0))
print *, ' a lower bound = ',lbound(a,1)
print *, ' a upper bound = ',ubound(a,1)

allocate(b(0:0))
print *, ' b lower bound = ',lbound(b,1)
print *, ' b upper bound = ',ubound(b,1)
return
end program test_zerosized

产生以下输出:
  a lower bound =            1
a upper bound = 0
b lower bound = 0
b upper bound = 0

我的编译器 (gcc/gfortran 6.2.0) 是否符合标准?我不明白为什么 lbound(a,1)==1而不是 lbound(a,1)==0 ,因为总数组大小为零元素。谢谢!

最佳答案

您观察到的结果是正确的行为。

数组 a大小为零,并且 lbound适用于此类数组 (F2008, 13.7.90)(我的重点):

If ARRAY is a whole array and either ARRAY is an assumed-size array of rank DIM or dimension DIM of ARRAY has nonzero extent, LBOUND (ARRAY, DIM) has a value equal to the lower bound for subscript DIM of ARRAY. Otherwise the result value is 1.


ubound以互补的方式工作。

将此与大小为 1 的数组 b 进行比较下限零和上限零。
a 的可分配性质不相关,并且您会看到具有零大小的显式形状数组的相同结果。

关于arrays - Fortran中0大小数组的数组边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com