好吧,昨天我有一位同事來到我的辦公室,問我一個關於他必須使用的Fortran代碼的問題。任何理由只傳遞第一個元素而不是整個數組?
基本上,他使用的代碼有一個很長的多維數組,以及一個期望這個長的多維數組作爲參數的子例程。
但是,調用該子例程的代碼只能傳遞數組的第一個元素。然而,代碼的作品。所以他問我怎麼可能。
我還沒有看到他的特殊的代碼,但在這裏就是我所理解的問題的示例(和它的作品!):
subroutine print_array(a)
implicit none
integer :: a(10)
write(*, *) a
end subroutine print_array
program passing
implicit none
integer :: i(10)
i = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /)
call print_array(i(1))
end program passing
所以我告訴他,Fortran的商店陣列順序和位置該數組與第一個元素相同,並且由於該子例程需要某種形狀,因此它知道沿着該序列讀取多遠,依此類推。
我還告訴他,這是不好的編程習慣,他不應該自己寫這種代碼。
但從那以後我一直在想:爲什麼寫這個的人會這樣做呢?是否有任何理由這樣做? (它甚至不一定是一個很好的理由。)
或者我是對的,這是愚蠢的,太容易出錯?
令人驚訝,但合法! –