【问题标题】:Static pointer default value in c/c++ [duplicate]c / c ++中的静态指针默认值[重复]
【发布时间】:2014-02-23 04:12:20
【问题描述】:

由于没有分配任何值的静态变量声明进入代码的 BSS 部分。它将自动初始化为零。

问题: 假设,如果声明静态指针没有任何赋值,那么地址或值是否应该为零?

【问题讨论】:

  • 注意,dup 仅标记为 C。
  • 看起来您对指针变量及其值有点困惑。请记住,指针变量本身就是一个变量,这意味着它有一个值,但在这种情况下,您可以将其值用作地址。

标签: c++ c static


【解决方案1】:

在 C 中,静态指针将被初始化为 null,draft C99 standard 部分 6.7.8 Initialization 段落 10 说:

具有静态存储持续时间的对象未显式初始化,则:

并包含以下项目符号:

——如果是指针类型,则初始化为空指针;

所以没有为它分配存储空间,它是一个空指针。另请注意,这是存储静态变量的实现定义的行为。

the C++ draft standard 的相关部分将是部分 8.5 Initializers13 段,其中说(强调我的):

如果没有为对象指定初始化器,则该对象是默认初始化的;如果不执行初始化,则具有自动或动态存储持续时间的对象具有不确定的值。 [注:具有静态或线程存储持续时间的对象是 零初始化,见 3.6.2。 ——尾注]

zero-initialize 包含在第 6 段中,它说:

对 T 类型的对象或引用进行零初始化意味着:

并有以下项目符号:

——如果T是标量类型(3.9),则将对象设置为值0(零),作为整数常量表达式,转换为T;103

脚注103 说(强调我的):

如 4.10 中所述,将值为 0 的整型常量表达式转换为 指针类型会产生空指针值

【讨论】:

    【解决方案2】:

    指针将指向地址零(在大多数系统上为 NULL)。在将其用作指针之前,您仍需要将其指向有效的位置(例如来自 malloc)。

    【讨论】:

    • 不,它将被初始化为NULL指针值,无论其表示是否为零。对于指针,常量 0 转换为 NULL 指针值,不是全零的位模式。
    猜你喜欢
    • 2013-01-27
    • 2015-05-04
    • 2015-04-06
    • 1970-01-01
    • 2017-08-26
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多