回 帖 发 新 帖 刷新版面

主题:在子函数中可以将传递过来的参数重新用dimension定义吗?

比如,子函数中传递参数中有TIME:SUBROUTINE CREEP(TIME......)
又重新定义:DIMENSION TIME(2)
这样在使用TIME(1)和TIME(2)的时候,是不是0(未在子函数赋值)或者还是主函数传递过来的TIME值?
求高手解惑,我看到一个程序这样写,不明白用意。

回复列表 (共5个回复)

沙发

那主函数里面, 你的time是怎么定义的?

如果主函数的time跟子函数的time维度不同,那可能造成内存溢出. 要是做了接口或者module的话会直接提示参数不对应. 要是前面这个错了那就没有后面"是不是0"这个问题了.

板凳


主函数在软件里面,看不到,我看到的只是子程序接口,主函数的TIME维度应该是一维两个数,没错。但我就纳闷为什么在子函数还要用dimension重新申明一下TIME,那样会不会每次调用子函数时,TIME都赋为0,0.或者dimension声明语句不会自动赋值?声明后的TIME继续保留传递参数的值?

3 楼

那倒不会赋值为0. 就算新定义一个变量,那些赋值0的情况也只是"某些"编译器的初始化而已.
其实如果你不知道那个数组多什么维度, 可以定义他 time(:)的. 然后用size()函数探测一下.

4 楼


谢谢,可惜我在别的软件中调用,调用过程中都是封闭的,无法用你的方法测试维度。不过,我试算了,可以。说明dimension并没有重新初始化。只是一种声明吧。

5 楼

demension只是声名而已。如果传入的参数是别的程序,并且不是fortran程序,那size也是不可以的。就按接口要求来吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册