求助!!子函数变量是数组时,如何声明数组的大小??
COMPLEX FUNCTION FILON(CFUN,CEX,ARG,N,FAC)COMPLEX AI,CSUM,CFUN(1),CEX(1),DFUN,DEX,DARG,DPROD
DIMENSION ARG(1)
AI=CMPLX(0.,1E0)
CSUM=0E0
DO 10 I=1,N-1
DARG=-AI/(ARG(I+1)-ARG(I))
DFUN=CFUN(I+1)-CFUN(I)
DEX=CEX(I+1)-CEX(I)
DPROD=CFUN(I+1)*CEX(I+1)-CFUN(I)*CEX(I)
CSUM=CSUM+DARG*(DPROD-DARG*DFUN*DEX)
10CONTINUE
FILON=FAC*CSUM
RETURN
END
请问上述子函数中,变量CFUN,CEX以及ARG的数组大小为N,为什么声明的时候用CFUN(1),CEX(1)和ARG(1)呢?
这应该是一种不严禁而且过时的用法。
我感觉可以这么理解,传递给函数的变量是数组时,实际传递进来的是数组的地址,比如DIMENSION ARG(1)就是为了告诉函数ARG是个数组,使用时按地址考虑。
实际使用时ARG(1)表示第一个元素的地址,ARG(2)表示第二个,以此类推。
声明的类型不一样,地址增加的字节不一样,因此变量声明不能少。
用这种方法必须对数组元素的个数非常清楚,否则容易出现数组越界。
这个函数传递进参数N是为了控制数组访问的地址,防止越界的。 是的,这种传递数组的方式非常古老,并且早就淘汰了。
你可以看本站的文章:http://passarray.w.fcode.cn/ necrohan 发表于 2019-11-12 10:06
这应该是一种不严禁而且过时的用法。
我感觉可以这么理解,传递给函数的变量是数组时,实际传递进来的是数 ...
非常感谢您的回答,这个问题困扰了我好久 fcode 发表于 2019-11-12 11:11
是的,这种传递数组的方式非常古老,并且早就淘汰了。
你可以看本站的文章:http://passarray.w.fcode.cn/ ...
这里真是学fortran的天堂啊,困扰了我一天的问题,瞬间解决了!万分感谢 necrohan 发表于 2019-11-12 10:06
这应该是一种不严禁而且过时的用法。
我感觉可以这么理解,传递给函数的变量是数组时,实际传递进来的是数 ...
请问声明的时候用CFUN(N),CEX(N)和ARG(N)是不是正确呢? zxbballack 发表于 2019-11-13 10:00
请问声明的时候用CFUN(N),CEX(N)和ARG(N)是不是正确呢?
这种叫“自动”数组,是可以的。
页:
[1]