函数在Fortran中返回数组

Sta*_*ler 22 arrays fortran function fortran90

我的理解是你可以从Fortran中的函数返回一个数组,但由于某种原因,我的代码只返回我要求它返回的数组中的第一个值.这是功能:

function polynomialMult(npts,x,y)
    integer npts
    double precision x(npts), results(npts + 1), y(npts,npts)

    polynomialMult =  x(1:npts) + 1

end function
Run Code Online (Sandbox Code Playgroud)

这就是我所说的

 C(1:numPoints) = polynomialMult(numPoints,x,f)

print *, C(1:numPoints)`
Run Code Online (Sandbox Code Playgroud)

现在它没有做任何有用的事情,因为我在编写逻辑之前试图理解语法.我看到了一些关于为函数指定类型的东西,但是当我写的时候

integer function polynomialMult(npts,x,y)
Run Code Online (Sandbox Code Playgroud)

或者无论我得到编译错误.

Hig*_*ark 31

要定义一个返回数组的函数,请在函数内部包含函数声明,如下所示:

function polynomialMult(npts,x,y)
    integer npts
    double precision x(npts), results(npts + 1), y(npts,npts)

! Change the next line to whatever you want
    double precision, dimension(npts) :: polynomialMult

    polynomialMult =  x(1:npts) + 1

end function
Run Code Online (Sandbox Code Playgroud)

你的声明

integer function polynomialMult(npts,x,y)
Run Code Online (Sandbox Code Playgroud)

声明该函数返回一个整数. 整数,而不是整数数组.我不认为标准允许函数声明,例如:

integer, dimension(10) function polynomialMult(npts,x,y)
Run Code Online (Sandbox Code Playgroud)

但我可能是错的.我总是使用上面展示的表格.

如果你有一个最新的Fortran编译器,你可以做一些聪明的事情,比如返回一个已分配的数组.我建议你弄清楚数组语法.例如,您的声明:

polynomialMult =  x(1:npts) + 1
Run Code Online (Sandbox Code Playgroud)

可以更简洁地写成:

polynomialMult =  x + 1
Run Code Online (Sandbox Code Playgroud)

因为Fortran会将标量加法映射到数组x的所有元素,这些元素已声明只npts包含元素.

将数组的大小传递给子程序非常FORTRAN77,现在几乎总是不必要的.通常,您要么对数组中的每个元素进行操作(如数组语法示例中所示),要么让子程序计算出它正在处理的数组的大小.