fortran二维可变大小数组赋初值

二维数组赋值查到有两种简单的赋值办法一种用了data,另一种直接a(2,2)=(/1,2,3,4/)用allocate设置了可变大小数组以后,想给a(n,n)这个二维数组... 二维数组赋值查到有两种简单的赋值办法
一种用了data,另一种直接a(2,2)=(/1,2,3,4/)
用allocate设置了可变大小数组以后,想给a(n,n)这个二维数组赋初值(n=3,已经设成了常数)
查了下说是可变大小数组没法用data赋值(程序先执行data,遇到动态数组没法赋值)
用了第二种a(n,n)=(/1,2,3,4,5,6,7,8,9/)总有一个错误
Error: The shapes of the array expressions do not conform.
不知道是为什么?求教……orz
不会allocate(a(n,n))这个本身就是错的吧?
P.S上网查有人说是文件或路径是中文,这个绝对没有;有人说可能用户定义变量与系统变量重复造成冲突,这个不懂;有人说数组运算的时候,前后数组的形状不一致,不太明白是怎么回事,但是不用可变大小数组时候,直接a(3,3)=...程序可以运行没有错误,我觉得不是这个的原因……
展开
 我来答
天河流纹石
推荐于2017-09-25 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7624
采纳率:76%
帮助的人:4059万
展开全部
第一,data 是定义语句,而不是执行语句。
第二,allocate(a(n,n)) 没有问题。
第三,网上这些问题你很难搜索到,因为不好描述。别人说的很可能与你遇到的不是同一个问题。你需要有针对性的提问。

以下是解答。
Program Baidu_Thlws
Implicit None
real :: b( 3, 3 ) = (/(/1,2,1/),(/3,2,3/),(/2,3,4/)/) !//直接定义时,可以使用这样的二维数组形式。
Real , allocatable :: a( : , : )
Allocate( a( 3, 3 ) )
a = reshape( (/1,2,3,4,5,6,7,8,9/) , (/3,3/) ) !// 可变数组可使用 reshape 把一维数组形式转变为二维数组形式
write(*,*) a
write(*,*) b
End Program Baidu_Thlws

reshape 函数用于把一个数组改变外形,变为另一个数组。
例如上例:
a = reshape( (/1,2,3,4,5,6,7,8,9/) , (/3,3/) )

(/1,2,3,4,5,6,7,8,9/)
这个 1*9 的一维数组,转换为
(/3,3/) 的数组,即 3*3 的数组。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式