| 查看: 2226 | 回复: 8 | ||
[求助]
请教一个read的用法,谢谢
|
» 本主题相关价值贴推荐,对您同样有帮助:
请教如下子程序中红色部分代码的用法。谢谢!
已经有3人回复
求助,同时使用read_data和create_atoms的问题
已经有4人回复
帮忙解释一个read语句,谢谢
已经有4人回复
关于restart,geom=check,guess=read命令使用的问题
已经有8人回复
请教一个应用read时出现数组越界的问题,谢谢
已经有7人回复
请教一个程序小问题,谢谢
已经有4人回复
请教一个fortran小程序编译出错的问题,谢谢
已经有9人回复
【求助】向版上的大牛请教一个推倒变换的数学题,谢谢
已经有3人回复
应用程序错误内存不能为read对话框出现的问题求助
已经有6人回复
mchen10
金虫 (正式写手)
- 应助: 13 (小学生)
- 金币: 1508.2
- 散金: 41
- 红花: 6
- 帖子: 425
- 在线: 159.5小时
- 虫号: 695973
- 注册: 2009-02-04
- 性别: GG
- 专业: 理论和计算化学

2楼2011-10-15 03:08:26
snoopyzhao
至尊木虫 (职业作家)
- 程序强帖: 16
- 应助: 157 (高中生)
- 贵宾: 0.02
- 金币: 18844.7
- 红花: 29
- 帖子: 3803
- 在线: 1422.4小时
- 虫号: 183750
- 注册: 2006-02-13
- 专业: 污染生态化学
3楼2011-10-15 14:30:40
4楼2011-10-15 23:26:37
snoopyzhao
至尊木虫 (职业作家)
- 程序强帖: 16
- 应助: 157 (高中生)
- 贵宾: 0.02
- 金币: 18844.7
- 红花: 29
- 帖子: 3803
- 在线: 1422.4小时
- 虫号: 183750
- 注册: 2006-02-13
- 专业: 污染生态化学
5楼2011-10-16 13:01:30
|
program ex0804 implicit none integer :: a(2) DATA a /1,2/ integer :: b(2) data b /2,3/ call add(a,b) ! 把变量a及b交给子程序add来处理 stop end subroutine add(first, second) implicit none integer :: first, second ! first,second的内容会从CALL时得到 write(*,*) first+second return end |
6楼2011-10-16 22:51:30
snoopyzhao
至尊木虫 (职业作家)
- 程序强帖: 16
- 应助: 157 (高中生)
- 贵宾: 0.02
- 金币: 18844.7
- 红花: 29
- 帖子: 3803
- 在线: 1422.4小时
- 虫号: 183750
- 注册: 2006-02-13
- 专业: 污染生态化学
【答案】应助回帖
★
jjdg(金币+1): 感谢参与 2011-10-17 02:32:35
li_clifff(金币+10): 谢谢你的评论,如果数组参数在主程序和多个子程序都出现,是不是也是这样一步步传递,读入子程序,运行子程序出来新的数组,再读入下一个子程序。。。 2011-10-17 09:44:20
jjdg(金币+1): 感谢参与 2011-10-17 02:32:35
li_clifff(金币+10): 谢谢你的评论,如果数组参数在主程序和多个子程序都出现,是不是也是这样一步步传递,读入子程序,运行子程序出来新的数组,再读入下一个子程序。。。 2011-10-17 09:44:20
|
6楼: Originally posted by li_clifff at 2011-10-16 22:51:30: program ex0804 implicit none integer :: a(2) DATA a /1,2/ integer :: b(2) data b /2,3/ call add(a,b) ! 把变量a及b交给子程序add来处理 stop end subroutine add(first, se ... 由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了…… 在你的这个例子中,很显然,只取其中的一个数值。 对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址,后面到底如何取值,还要看子程中的定义……这种情况下,一定要注意 Fortran 中是列优先的存贮方式…… |
» 本帖已获得的红花(最新10朵)
7楼2011-10-17 00:11:07
送鲜花一朵 |
7楼: Originally posted by snoopyzhao at 2011-10-17 00:11:07: 由于 Fortran 是 call by reference,所以,关键还是要看子程中相关变理的声明了…… 在你的这个例子中,很显然,只取其中的一个数值。 对于你前面说的,其实,传递给子程的只是数组对应的第一个数值的地址 ... program ex0804 implicit none integer :: a(3) DATA a /1,2,3/ integer :: b(3) data b /4,5,6/ call add(a,b) ! 把变量a及b交给子程序add来处理 call add1(a,b) stop end subroutine add(first, second) implicit none integer :: first(2), second(2) ! first,second的内容会从CALL时得到 write(*,*) first+second return end subroutine add1(first, second) implicit none integer :: first, second ! first,second的内容会从CALL时得到 write(*,*) first+second return end 为什么运行的结果是 5 7 5 |
8楼2011-10-17 09:59:56
|
没有问题,我自己弄错了 program ex0804 implicit none !integer:: a=1 integer :: a(3) DATA a /1,2,3/ !integer:: b=2 integer :: b(3) data b /4,5,6/ call add(a,b) ! 把变量a及b交给子程序add来处理 call add1(a,b) stop end subroutine add(first, second) implicit none integer :: first(2), second(2) ! first,second的内容会从CALL时得到 ! write(*,*) first+second first = first + second second =2*second return end subroutine add1(first, second) implicit none integer :: first(2), second(2) ! first,second的内容会从CALL时得到 write(*,*) first+second return end 运行结果是 13 17 |
9楼2011-10-17 10:36:21













回复此楼