【问题标题】:When C says start up values of global variables are zero, does it mean also struct members? And what is the initial value of a pointer?当 C 说全局变量的启动值为零时,是否也意味着结构成员?指针的初始值是多少?
【发布时间】:2011-05-26 13:09:20
【问题描述】:

当 C 说 global[/static] 变量的启动值为零时,是否也意味着结构成员? [global/static] 指针的初始值是多少?空?

【问题讨论】:

    标签: c variables


    【解决方案1】:

    是的,这是由 C99 6.7.8p10 指定的:

    如果一个对象具有自动 存储持续时间未初始化 明确地,它的值是 不定。如果一个对象有 静态存储时间不 显式初始化,然后:

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

    【讨论】:

      【解决方案2】:

      是的,所有类型的静态变量都将设置为零。这包括指针 - NULL 指针是设置为零的指针。

      【讨论】:

      • 我记得多次阅读NULL理论上可以是任何数字。
      • @Lela 它可以在内部表示为任何值,但是当你设置一个指向 NULL 的指针时,NULL 必须是零的某种表示。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2020-12-15
      • 2014-10-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多