4

我刚开始学习 Fortran,就遇到了这个问题。考虑下面的简单代码。

PROGRAM random

INTEGER, DIMENSION(12):: array
PRINT *, array

END PROGRAM random

array没有赋值,但是可以打印,而且好像有几个随机元素和几个零元素。但是,如果我考虑一个较短的数组,说我声明

INTEGER, DIMENSION(5):: array

那么打印的数组的所有元素= 0。我想知道这里发生了什么?

4

2 回答 2

6

当您定义一个数组并尝试在初始化它之前查看它包含的值(即通过打印)时,行为是未定义的。这取决于编译器到编译器。虽然一个编译器可能会自动将所有值设置为零(我们许多人认为这是默认值),但另一个编译器可能会将其设置为完全随机的值。这就是为什么您看到数组值有时为零,有时不是。

但是,许多编译器具有在编译器级别将未分配数组初始化为零的选项。始终建议在使用数组之前始终对其进行初始化!

于 2014-07-25T05:14:14.957 回答
3

如果您不初始化变量,您将看到变量占用的内存中发生的任何事情。要将数组初始化为 0,请使用以下语句:

integer, dimension(12) :: array
array = 0

如果您在访问变量之前未对其进行初始化,则您正在使用未定义的行为并且您的程序无效。

于 2014-07-25T04:09:25.030 回答