主题:在子函数中可以将传递过来的参数重新用dimension定义吗?
jexy208
[专家分:0] 发布于 2012-03-05 09:46:00
比如,子函数中传递参数中有TIME:SUBROUTINE CREEP(TIME......)
又重新定义:DIMENSION TIME(2)
这样在使用TIME(1)和TIME(2)的时候,是不是0(未在子函数赋值)或者还是主函数传递过来的TIME值?
求高手解惑,我看到一个程序这样写,不明白用意。
回复列表 (共5个回复)
沙发
yeg001 [专家分:14390] 发布于 2012-03-05 09:58:00
那主函数里面, 你的time是怎么定义的?
如果主函数的time跟子函数的time维度不同,那可能造成内存溢出. 要是做了接口或者module的话会直接提示参数不对应. 要是前面这个错了那就没有后面"是不是0"这个问题了.
板凳
jexy208 [专家分:0] 发布于 2012-03-05 15:47:00
主函数在软件里面,看不到,我看到的只是子程序接口,主函数的TIME维度应该是一维两个数,没错。但我就纳闷为什么在子函数还要用dimension重新申明一下TIME,那样会不会每次调用子函数时,TIME都赋为0,0.或者dimension声明语句不会自动赋值?声明后的TIME继续保留传递参数的值?
3 楼
yeg001 [专家分:14390] 发布于 2012-03-05 16:02:00
那倒不会赋值为0. 就算新定义一个变量,那些赋值0的情况也只是"某些"编译器的初始化而已.
其实如果你不知道那个数组多什么维度, 可以定义他 time(:)的. 然后用size()函数探测一下.
4 楼
jexy208 [专家分:0] 发布于 2012-03-05 16:27:00
谢谢,可惜我在别的软件中调用,调用过程中都是封闭的,无法用你的方法测试维度。不过,我试算了,可以。说明dimension并没有重新初始化。只是一种声明吧。
5 楼
cgl_lgs [专家分:21040] 发布于 2012-03-06 07:24:00
demension只是声名而已。如果传入的参数是别的程序,并且不是fortran程序,那size也是不可以的。就按接口要求来吧。
我来回复