代码之家  ›  专栏  ›  技术社区  ›  chaemin

fortran中的某些计算机没有将数组的初始值指定为零。为什么?

  •  0
  • chaemin  · 技术社区  · 2 年前

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

    PROGRAM random
    
    INTEGER, DIMENSION(12):: array
    PRINT *, array
    
    END PROGRAM random
    

    这个 array 不是赋值,而是可以打印的,它似乎有几个随机元素和几个零元素。但是,如果我考虑更短的数组,比如说我声明

    INTEGER, DIMENSION(5):: array
    

    然后,打印的数组的所有元素都为0。我想知道这里发生了什么?

    0 回复  |  直到 10 年前
        1
  •  6
  •   Madhurjya    10 年前

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

    然而,许多编译器都可以在编译器级别将未赋值数组初始化为零。人们总是建议在使用数组之前初始化它!

        2
  •  3
  •   casey    10 年前

    如果不初始化变量,则会看到变量占用的内存中发生了什么。要将数组初始化为0,请使用以下语句:

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

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

    推荐文章