Function 在Fortran中的函数内生成数组会产生意外的结果
我创建了一个程序,用Fortran从函数中生成一个数组(1,2,3,4,5)。 我知道可以做得更容易,但我想知道为什么我所做的不起作用Function 在Fortran中的函数内生成数组会产生意外的结果,function,fortran,gfortran,Function,Fortran,Gfortran,我创建了一个程序,用Fortran从函数中生成一个数组(1,2,3,4,5)。 我知道可以做得更容易,但我想知道为什么我所做的不起作用 program main implicit none integer, dimension(5) :: array1, fillArray array1 = fillArray print*,array1 end program main function fillArray() implicit none intege
program main
implicit none
integer, dimension(5) :: array1, fillArray
array1 = fillArray
print*,array1
end program main
function fillArray()
implicit none
integer :: i
integer, dimension(5) :: fillArray
do i = 1,5
fillArray(i) = i
end do
end function fillArray
当编译时,返回
0 0-2146721293 1 0
我想也许我需要像array1=fillArray()
那样定义它。
那也不行
像这样传入一个无用的变量a
:
program main
implicit none
integer, dimension(5) :: array1, fillArray
array1 = fillArray(4)
print*,array1
end program main
function fillArray(a)
implicit none
integer :: i,a
integer, dimension(5) :: fillArray
a = a+1
do i = 1,5
fillArray(i) = i
end do
end function fillArray
给予
1 1 1 1 1
总之,我不知道发生了什么事。
我确实看过类似的问题,但我对Fortran的经验不足,无法使用其他示例代码重现我的结果
*编辑:我很惊讶这个问题已经被问到了,因为我在这个网站上筛选了很长一段时间,却找不到它。但是我的问题现在解决了,谢谢你的回复
*edit2:根据记录,解决方案是:
module mySubs !modules before the program!
implicit none
contains
function fillArray()
integer :: i
integer, dimension(5) :: fillArray
do i = 1,5
fillArray(i) = i
end do
end function fillArray
end module mySubs
program main
use mySubs
implicit none
integer, dimension(5) :: array1
array1 = fillArray()
print*,array1
end program main
您缺少函数的显式表达式。返回数组的函数需要显式接口。这可以通过使用模块或使函数内部化来实现。这两个相互关联的问题和答案详细解释了这一点。在您的例子中,
integer,dimension(5)::array1,fillArray
在主程序中定义了一个新的本地数组,而不是函数,要找到重复的数组并不太容易,您必须知道要查找什么。您缺少函数的显式数组。返回数组的函数需要显式接口。这可以通过使用模块或使函数内部化来实现。这两个相互关联的问题和答案详细解释了这一点。在您的例子中,integer,dimension(5)::array1,fillArray
在主程序中定义了一个新的本地数组,而不是函数,要找到重复的数组并不太容易,您必须知道要查找什么。