[C]为什么C标准定义全局变量应该初始化为0?

  • 本文关键字:初始化 全局变量 标准 定义 c
  • 更新时间 :
  • 英文 :


我有问题'为什么全局变量总是初始化为0?'。我在这里找到了答案。
为什么全局变量总是初始化为'0',而局部变量却不是?

然而,我有一个新问题。
为什么C标准定义全局变量应该初始化为0?为什么不把它初始化为另一个数字呢?(1, 2, 3…)

对于所有内置的数据类型,0都由一串零值二进制数字表示。无论数据类型的宽度如何,所有的零都解析为算术值零。运行时启动代码不会对单个变量进行零初始化,而是对实例化变量所在的整个内存块进行零初始化。

通过使用零,所有float,double,int,char等都有一个可以与文字零(0)比较并匹配的值。如果你用任何其他字节值初始化(记住是块而不是变量初始化),有效的变量值将取决于数据类型(宽度和表示)。

此外,零初始化确保所有指针的值都是NULL,而不是一些任意的、无意义的、可能无效的地址,这些地址在解引用时会导致未定义的行为。