首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在fortran90中填充大小未知的数组

在fortran90中填充大小未知的数组
EN

Stack Overflow用户
提问于 2017-07-11 04:50:28
回答 2查看 5.4K关注 0票数 0

我想在fortran90中填充一个大小未知的数组。这是MATLAB中的等效代码:

代码语言:javascript
复制
for i=1:10
 A[i] = i
end

我知道我可以传递大小,但是如何在不传递数组大小的情况下在fortran90中做到这一点。我读到我们可以使用指针,但我真的不知道如何处理指针

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-11 05:41:55

我知道您希望在知道数组的最终大小之前开始向数组中添加元素。

例如,您希望从文件中读取值,直到到达文件的末尾,而不知道有多少值。

我可以想到三种方法:

  1. 创建一个足够大小的数组,并记住最后的值。 整数::a(200),n=1 do a(n) = if ()退出n=n+1末端do <使用a(1:n)> )
  2. 创建两个可分配数组,当您到达其中一个数组的末尾时,将另一个数组变大,然后交换它们: 整数,可分配的::a(:),tmp(:)整数::i,n=8分配(a( n) )i=1如果(i >n)然后分配(tmp(2*n)) tmp(1:n) = a(:)调用move_alloc(tmp,如果a(i) = if ()退出I=i+1端,则需要分配(tmp(I)) tmp(:) = a(1:i)调用move_alloc(tmp,a)
  3. ,我不再推荐这个了。指针可能会令人困惑,并会创建奇怪的、难以调试的But。,但我将其留待后代使用:创建一个链接列表(此处使用堆栈)。 输入t_node整数::值类型( t_node ),指针::next => NULL()结束类型t_node类型(T_node),指针::list,tmp整数,可分配的: a(:),i,如果()退出n=n+ 1结束do分配(a(N)) do i= n,1 a(i) = list % tmp =>列表列表=>列表%
票数 5
EN

Stack Overflow用户

发布于 2017-07-11 13:38:00

按照我读你的问题的方式,你有一个子例程需要填充一个数组,但是这个数组的大小未知,你不想传递这个大小。所以你不想这样:

代码语言:javascript
复制
SUBROUTINE FILL( A, N )
    INTEGER N
    INTEGER A(N)
    INTEGER I
    DO I=1,N
        A(I) = I
    END DO
END SUBROUTINE FILL

相反,您希望获得数组的SIZE

代码语言:javascript
复制
SUBROUTINE FILL( A )
  INTEGER A(:)
  INTEGER I
  DO I=1,SIZE(A)
     A(I) = I
  END DO
END SUBROUTINE FILL
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45025647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档