遇到一个数组片段的问题。
代码1:
do i=1,size(ia_index,2)
ra_val(ia_index(1,i)) = ra_val(ia_index(1,i)) + ra_add(i)
ra_val(ia_index(2,i)) = ra_val(ia_index(2,i)) + ra_add(i)
enddo
代码2:
ra_val(ia_index(1,:)) = ra_val(ia_index(1,:)) + ra_add
ra_val(ia_index(2,:)) = ra_val(ia_index(2,:)) + ra_add
我一直以为代码1和2得到的结果是一样的,今天遇到一个问题发现并不一样,代码1的结果是正确的,当ia_index(1,:)表示的某个下标索引出现1-2次的时候,两段代码结果一致,当出现3次的时候,代码1可以累加,代码2中ra_val索引指向的成员就只有最后一个值,没有累加。不知何故!
事实上,我最初使用代码2之前,由于不放心,是做过实验的:
[Fortran] 纯文本查看 复制代码 program main
implicit none
integer :: ia(5),ib(9)
ia = [1,5,5,5,2]
ib = 0
ib(ia) = ib(ia) + [1,1,1,1,1]
write(*,*) ib
stop
end program
结果见附件图片,无误,能够叠加我才这么写的,真是郁闷了...
还请大伙指点,先谢谢了!
|