c / c ++中的静态指针默认值

时间:2014-02-23 04:12:21

标签: c++ c static

由于没有赋值的静态变量声明存在于代码的BSS部分。它将自动初始化为零。

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

2 个答案:

答案 0 :(得分:9)

在C中,静态指针将初始化为null,draft C99 standard部分6.7.8 初始化 10 表示:

  

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

并包括以下项目符号:

  

- 如果它有指针类型,则将其初始化为空指针;

因此没有为它分配存储空间,它是一个空指针。另请注意,它是一个实现定义的行为,其中存储了静态变量。

the C++ draft standard的相关部分是第8.5 个初始化 13 ,其中写着(强调我的) :

  

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

零初始化包含在 6 段中,其中包含:

  

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

并有以下子弹:

  

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

其中脚注 103说(强调我的):

  

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

答案 1 :(得分:0)

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