Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在Fortran中的函数内生成数组会产生意外的结果_Function_Fortran_Gfortran - Fatal编程技术网

Function 在Fortran中的函数内生成数组会产生意外的结果

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

我创建了一个程序,用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
    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
在主程序中定义了一个新的本地数组,而不是函数,要找到重复的数组并不太容易,您必须知道要查找什么。