Fortran Coder

查看: 2364|回复: 5
打印 上一主题 下一主题

[求助] 关于Fortran动态数组的若干问题

[复制链接]

9

帖子

4

主题

0

精华

入门

F 币
39 元
贡献
19 点
跳转到指定楼层
楼主
发表于 2023-3-20 15:32:25 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
今天看Fortran动态数组相关问题的时候遇到了一些问题。1、写代码的时候,如果直接定义integer::m=5,下一行写real*8 a(m),那编译将无法通过;但是如果在一个subroutine里,这个m作为子程序的输入参数传进来,在
integer::m后,可以下一行跟real*8 a(m),能成功编译,请问都是变量,为什么第一种形式不能编译,而第二种可以。
2、在后续作测试的时候发现,把一个数组a(大小为m,即5,初始化后里面为5个0.0)传入subroutine后,我在subroutine定义real,dimension(n)::a时,手滑将n达成了
阿拉伯数字的1,即real,dimension(1)::a,可程序仍可以正常编译,运行exe之后仍能输出正常的结果。代码如下,请大家不吝赐教,谢谢了!
[Fortran] 纯文本查看 复制代码
Program main
    implicit none   
    integer::m=5
    call dyaraayini(m) 
end

Subroutine dyaraayini(n)
    implicit none
    integer n,i
    real dya(n)
    do i=1,n
        dya(i)=0.0
    end do
    write(*,*)dya
    call arraytest(dya,n)
    write(*,*)dya
end 



Subroutine arraytest(a,n)
    implicit none
    integer i,n
    real,dimension(1)::a
!    real,dimension(n)::a
    do i=1,n
        a(i)=1+i
    end do
end





分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

9

帖子

4

主题

0

精华

入门

F 币
39 元
贡献
19 点
沙发
 楼主| 发表于 2023-3-20 15:43:43 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
Program main
    implicit none   
    integer::m=5
    call dyaraayini(m) 
end
    
Subroutine dyaraayini(n)
    implicit none
    integer n,i
    real dya(n)
    do i=1,n
        dya(i)=0.0
    end do
    write(*,*)dya
    call arraytest(dya,n)
    write(*,*)dya
end 

    

Subroutine arraytest(a,n)
    implicit none
    integer i,n
    real,dimension(1)::a
!    real,dimension(n)::a
    do i=1,n
        a(i)=1+i
    end do
end 

9

帖子

4

主题

0

精华

入门

F 币
39 元
贡献
19 点
板凳
 楼主| 发表于 2023-3-21 09:04:10 | 显示全部楼层
青衣巷 发表于 2023-3-20 19:43
问题1,请注意:
integer::m=5  是变量。
integer , parameter :: m=5 才是常量

非常感谢
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 11:52

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表