很久以前我就被告知,在FORTRAN中,所有東西都是有價值的。因此,我需要做到這一點(提供mySubroutine
適當別處定義):Fortran中如何引用數量?
double precision :: myArray(2)
myArray(1:2) = (/ 2.3d0, 1.5d0 /)
CALL mySubroutine(myArray)
不過,我也發現,在程序編譯和運行正常,如果我這樣做
CALL mySubroutine((/ 2.3d0, 1.5d0 /))
無需定義一箇中介數組myArray
。我以爲我通過引用將myArray
轉換成mySubroutine
。在第二版中引發了什麼?編譯器是否解開子程序調用的包裝,僅聲明臨時變量以通過引用傳遞它?
在默認情況下,fortran中的所有內容(或行爲如同)通過引用傳遞。在第二種情況下,你是正確的編譯器有效地創建一個臨時數組並傳遞參考。請注意,如果'mysubroutine'修改了它的參數,它將在第一種情況下修改'myarray',並在第二種情況下做不可預測的事情。 – agentp