character(20) :: a='', b
当我定义字符串 ='', 获取空字符串的值。我没有初始化 b , 所以 b 没有值(value)。我认为内存地址已经分配给 和 b 正如它们所定义的那样。但是,空刺和无值(value)有什么区别?
最佳答案
请注意 Fortran 中的意外行为,声明中的初始化意味着 save
属性,这意味着初始化仅在第一次调用函数/子例程时有效,以后写入字符串的内容将保留在以后的调用中。使函数成为纯函数、元素函数或递归函数将导致编译错误。
一般来说,你应该在声明之后初始化!
所以一般来说,变量应该只声明为 character(20) :: a
.现在 a
在内存中分配,通常在该内存序列中写入的任何内容都将是变量包含的内容,直到您分配给它。如果在没有先赋值的情况下打印它,您将看到这些内存字节的字符串解释。
例如
program t
character (20) :: hej
print*,hej
end program
运行几次时(在带有 gcc 的 ubuntu 中)给出这些随机的东西:�Ʋ
86+
^�K
VBd�
&��A
关于string - 在 Fortran 中,空字符串和未初始化的字符串有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68016436/