【问题标题】:New to C: Does declaration of int or long initialize values to zero [duplicate]C 新手:声明 int 或 long 是否将值初始化为零 [重复]
【发布时间】:2016-03-03 23:53:01
【问题描述】:

我是 C 的新手。如果我写:

long  my_array[100]; // global variable

C 是否将值初始化为零,还是我必须手动将其初始化为零?

【问题讨论】:

  • 它创建一个长度为 100 的空数组。没有给出任何值。
  • 是的,对于全局变量,它会自动初始化为 0。它由 C 标准定义,并非特定于 GNU。
  • 如果是全局或静态声明的,则初始化为0。否则除非您自己初始化,否则不会初始化。
  • 如果是自动或本地声明的变量,你必须初始化它,但你不需要全部做。即使您仅初始化第一个元素,其余元素也会被初始化为 0。long my_array[100] = { 0,};

标签: c


【解决方案1】:

这取决于上下文。

如果数组是用静态存储持续时间声明的(在文件范围内或在带有显式关键字static 的块范围内),则保证它是零初始化的。否则根本不初始化。

您没有提供任何上下文。但是,评论表明这应该是一个“全局变量”,这意味着它是在文件范围内声明的。如果是,则初始化为零。

【讨论】:

    【解决方案2】:
    • 全局变量会自动填零(如果这是意图,则不需要初始化)。 标准要求 (§6.7.8/10)。

    • C99 标准第 6.7.8.10 节中未初始化静态对象的标准说:

    "如果具有自动存储时长的对象没有显式初始化,则其值是不确定的。如果具有静态存储时长的对象没有显式初始化,则:

    • 如果有指针类型,则初始化为空指针;
    • 如果它具有算术类型,则将其初始化为(正或无符号)零;
    • 如果是聚合,则每个成员都根据这些规则进行初始化(递归);
    • 如果是联合,则根据这些规则(递归)初始化第一个命名成员。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2015-10-02
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      相关资源
      最近更新 更多