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,现在几乎总是不必要的.通常,您要么对数组中的每个元素进行操作(如数组语法示例中所示),要么让子程序计算出它正在处理的数组的大小.