我的理解是你可以从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)
或者我得到编译错误。
答案 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
我甚至坚持认为我小组的编码员这样做。我不想努力去理解别人的代码 - 我希望它能够明白他们在做什么。