函数在Fortran中返回数组

时间:2010-09-30 05:50:49

标签: arrays function fortran 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

这就是我称之为

的地方
 C(1:numPoints) = polynomialMult(numPoints,x,f)

print *, C(1:numPoints)`

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

integer function polynomialMult(npts,x,y)

或者我得到编译错误。

2 个答案:

答案 0 :(得分:29)

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

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

您的声明

integer function polynomialMult(npts,x,y)

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

integer, dimension(10) function polynomialMult(npts,x,y)

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

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

polynomialMult =  x(1:npts) + 1

可以写得更简洁:

polynomialMult =  x + 1

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

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

答案 1 :(得分:3)

我同意前一位回复者的意见,以下是有效的:

polynomialMult = x + 1

然而,在不知道polynomialMult和x是数组的情况下,人们可能会认为它是一个标量运算。我更喜欢显而易见,并且这样做:

polynomialMult(:) = x(:) + 1

我甚至坚持认为我小组的编码员这样做。我不想努力去理解别人的代码 - 我希望它能够明白他们在做什么。