24小时热门版块排行榜    

查看: 569  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

贺仪

铁杆木虫 (著名写手)

[求助] 动态数组分配

我有一个数组cc(:,:,:)我通过读取文件 知道其中的前两维如(8,6,:),第三维要在定义以后才知道。
程序结构是这样的:
读取文件知道cc大小是(8,6,,第三维未知
然后进入循环读取
do i=1,8
           do j=1,6
            读取文件,知道cc(i,j,:)的第三维,但是每次大小都不一样:如cc(1,1,:)有5623个,cc(2,1,有1234个,(这里面最大的也不知道)
            然后读取     给 cc(i,j,5623)赋值
           enddo
enddo

请问只里面怎么是用动态分配?可以这样吗?:
      ALLOCATE(CC(NBAND,NKPTS, )先定下二维,然后在循环里面定义第三维吗?可以的话应该怎么弄?这样就会不会多次分配而出错?

或者有什么方法可以读取出来?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

嘟啦啦嘟啦啦嘟
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

koorb

铁虫 (初入文坛)

【答案】应助回帖

贺仪(金币+2): 多谢建议 2011-11-10 16:40:54
如果我没理解错的话,你是要将48个长度未知且不等的数组保存起来。
先动态定义一个6×8的二维数组。这个二维数组的数据类型是“数组”,也就是之前说的48个数组。
天道
5楼2011-11-10 16:01:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

koorb

铁虫 (初入文坛)

【答案】应助回帖


贺仪(金币+2): 多谢建议 2011-11-10 16:40:46
余泽成(金币+1): 谢谢参与应助!欢迎常来程序语言版! 2011-11-10 21:47:42
数组的3个维数是只能到程序运行到最后才能知道第3维的最大值,比如是D3。这时候数组才最后确定为ALLOCATE(CC(NBAND,NKPTS,D3 )。之前可以再定义一个临时变量暂时保存数据。

或者用链表,也就另外一种数据结构。
天道
4楼2011-11-10 15:53:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
5楼: Originally posted by koorb at 2011-11-10 16:01:14:
如果我没理解错的话,你是要将48个长度未知且不等的数组保存起来。
先动态定义一个6×8的二维数组。这个二维数组的数据类型是“数组”,也就是之前说的48个数组。

是的 但这只是举个例子,真正的数组会达到30*50

但是变成48个二维数组也没什意义,还是不能在这之前定义保存起来。

前面说的用一个临时变量那也要48个变量呀……

另外链表怎么用?可否大概说一下我的这个问题怎么解决?
嘟啦啦嘟啦啦嘟
6楼2011-11-10 16:40:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

koorb

铁虫 (初入文坛)

【答案】应助回帖


贺仪(金币+2): 谢谢,还是有点问题…… 2011-11-11 09:43:31
xzhdty(金币+1): 欢迎常来程序语言讨论 2011-11-11 10:46:21
引用回帖:
6楼: Originally posted by 贺仪 at 2011-11-10 16:40:17:
是的 但这只是举个例子,真正的数组会达到30*50

但是变成48个二维数组也没什意义,还是不能在这之前定义保存起来。

前面说的用一个临时变量那也要48个变量呀……

另外链表怎么用?可否大概说一下我的这 ...

30×50和6×8对应编程来说又有什么区别呢?
我说的3个方案都是可行的,只是你否定得太快了。
如果你不能从下面的例子中得到启示的话,那就算了。
   integer d1,d2,d3,i,j,k
    double precision, allocatable::array(:,:,
    d1=2
    d2=3
    d3=1
    allocate(array(d1,d2,d3))
    print *, array
    print *, "*****************"
    do i=1,d1
        do j=1,d2
            deallocate(array)!deallocate之前保存数据到临时数组里。
            d3=2
            allocate(array(d1,d2,d3))
        end do
    end do
    print *, array
天道
7楼2011-11-11 08:03:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见