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

Man*_*nku 1 c c++ static

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

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

Sha*_*our 9

在C中,静态指针将被初始化为null,草案C99标准部分6.7.8 初始化10段说:

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

并包括以下子弹:

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

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

C++草案标准的相关部分将是8.5 初始化程序13段,其中说明(强调我的):

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

零初始化见第6段,其中说:

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

并有以下子弹:

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

其中脚注 103说(重点煤矿):

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