我了解到所有全局变量都将初始化为“0”。如果我们在全球范围内声明以下行,
static char *pointer;
指针应该等于NULL。但这总是如此吗?因为在我当前的项目中,我初始化了一个像这样的指针。但是当我比较指针== NULL时,它变为false并且已经为其分配了一个值。这是一些垃圾地址吗?
答案 0 :(得分:3)
如果没有给出明确的初始值设定项,那么static
存储持续时间(全局或非全局)的所有对象将被隐式初始化为0
或NULL
。
6.7.9初始化
...
10如果未显式初始化具有自动存储持续时间的对象,则其值不确定。如果未明确初始化具有静态或线程存储持续时间的对象,则:
- 如果它有指针类型,则将其初始化为空指针;
- 如果它具有算术类型,则将其初始化为(正或无符号)零;
- 如果是聚合,则根据这些规则初始化(递归)每个成员,并将任何填充初始化为零位;
- 如果它是一个联合,则根据这些规则初始化(递归)第一个命名成员,并将任何填充初始化为零位;