我试图弄清楚为什么将标量放置在数组构造函数中的do构造之前会产生它的答案。
我大致了解do构造,即(/(i,i=1,5)/)
等效于(/1,2,3,4,5/)
。
real, dimension(4) :: a
integer :: i
a=(/(50,i,i=1,2)/)
这将产生数组50.0000000, 1.00000000, 50.0000000, 2.00000000
。充其量我会期望出现错误,因为步长不能产生足够的值来填充数组。
答案 0 :(得分:4)
由多个50
产生的数组是预期的数组。
部分问题文本与代码所显示的内容不匹配
将标量放置在数组构造函数中的do构造之前
在[(50,i,i=1,2)]
中(为了清楚起见,使用Fortran 2003 [...]
),标量值50
并非“隐含于”隐含的行为之前,而是其明显的一部分。可以和
a = [50, (i,i=1,3)]
这将导致构造数组[50, 1, 2, 3]
。
数组构造函数隐含的行为的正式语法为
( ac-value-list , ac-implied-do-control )
因此可以看出,即使仅使用单个值是很常见的,多个值也可以成为隐含的do控制范围的一部分。有了这样的多个值,它们就针对隐含的do的每次迭代都进行了评估(并且50
每次都进行相同的评估),并在数组构造中使用。