Fortran中返回一个数组?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (372)

我可以返回一个函数在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)

我得到一个编译错误。

提问于
用户回答回答于

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

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
用户回答回答于

我同意楼上的看法:

polynomialMult = x + 1

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

polynomialMult(:) = x(:) + 1

所属标签

可能回答问题的人

  • uncle_light

    5 粉丝518 提问8 回答
  • 嗨喽你好

    7 粉丝480 提问8 回答
  • 人生的旅途

    10 粉丝484 提问7 回答
  • 无聊至极

    4 粉丝504 提问6 回答

扫码关注云+社区

领取腾讯云代金券