我刚开始学习Fortran,就遇到了这个问题。考虑下面的简单代码:
PROGRAM random
INTEGER, DIMENSION(12):: array
PRINT *, array
END PROGRAM random
array
没有赋值,但可以打印,它似乎有一些随机元素和几个零元素。但是,如果我考虑更短的数组,假设我声明
INTEGER, DIMENSION(5):: array
则打印的数组中所有元素都= 0。我想知道这里发生了什么?
当你定义一个数组并尝试在初始化它之前查看它包含的值(即通过打印)时,行为是未定义的。这取决于不同的编译器。虽然一个编译器可能会自动将所有值设置为零(我们许多人认为这是默认值),但另一个编译器可能会将其设置为完全随机的值。这就是为什么你看到数组的值有时为零,有时不为零。
然而,许多编译器都有选项在编译器级别将未赋值数组初始化为零。总是建议在使用数组之前初始化它!
如果您不初始化变量,您将看到变量占用的内存中发生的任何情况。要将数组初始化为0,使用以下语句:
integer, dimension(12) :: array
array = 0
如果你在访问变量之前没有初始化它,你正在使用未定义行为,你的程序是无效的。