在C中静态全局指针总是初始化为NULL吗?

在C中静态全局指针总是初始化为NULL吗?,c,C,我了解到所有全局变量都将初始化为“0”。根据这一点,如果我们在全球范围内声明以下行 static char *pointer; 指针应等于NULL。但这总是真的吗?因为在我当前的项目中,我初始化了这样一个指针。但当我比较pointer==NULL时,它变为false,并且已经给它赋值了。它是某个垃圾地址吗?如果未给出显式初始值设定项,则具有静态存储持续时间(全局或非全局)的所有对象将隐式初始化为0或NULL : 6.7.9初始化 … 10如果没有显式初始化具有自动存储持续时间的对象,则其值是不

我了解到所有全局变量都将初始化为“0”。根据这一点,如果我们在全球范围内声明以下行

static char *pointer;

指针应等于NULL。但这总是真的吗?因为在我当前的项目中,我初始化了这样一个指针。但当我比较pointer==NULL时,它变为false,并且已经给它赋值了。它是某个垃圾地址吗?

如果未给出显式初始值设定项,则具有
静态
存储持续时间(全局或非全局)的所有对象将隐式初始化为
0
NULL

:

6.7.9初始化

10如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。如果没有显式初始化具有静态或线程存储持续时间的对象,则:
-如果有指针类型,则初始化为空指针
-如果它有算术类型,则初始化为(正或无符号)零
-如果它是一个聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位
-如果它是一个并集,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;
所有具有
静态
存储持续时间(全局或非全局)的对象将被隐式初始化为
0
NULL
,如果没有给出显式初始化器

:

6.7.9初始化

10如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。如果没有显式初始化具有静态或线程存储持续时间的对象,则:
-如果有指针类型,则初始化为空指针
-如果它有算术类型,则初始化为(正或无符号)零
-如果它是一个聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位
-如果它是一个并集,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;
是,它始终初始化为0。如果您想对问题的后一部分进行解释,请出示您的完整代码。我很确定您的代码中可能会有错误,或者对结果的解释不正确。按照惯例,会有错误,但是默认情况下将其设置为0或NULL是一个好习惯,以避免混淆,因为通常会忘记这一点,并认为它已初始化为该内存地址中的任何值,并引起怀疑。您使用的是哪种编译器?如果指针中有垃圾,则您环境的C启动会出现问题(这可能发生在设置开发环境的人员不知道他们在做什么的嵌入式系统上)是的,它始终初始化为0。如果您想对问题的后一部分进行解释,请出示您的完整代码。我很确定您的代码中可能会有错误,或者对结果的解释不正确。按照惯例,会有错误,但是默认情况下将其设置为0或NULL是一个好习惯,以避免混淆,因为通常会忘记这一点,并认为它已初始化为该内存地址中的任何值,并引起怀疑。您使用的是哪种编译器?如果指针中有垃圾,则您环境的C启动会出现问题(这可能发生在设置开发环境的人不知道自己在做什么的嵌入式系统上)除非它们被显式初始化为其他对象。除非它们被显式初始化为其他对象。