2016-04-24 32 views
2

我的目的是确保b初始化为NULL。自动初始化结构成员为NULL

标准ISO/IEC 9899:201X子句6.7.9-> 10个州

如果具有静态或线程存储持续时间的对象不是 明确初始化,则: - 如果它有指针类型,它是 初始化为空指针;

以下程序:

#include<stdio.h> 

struct A 
{ 
    char* b; 
}; 

int main(void) 
{ 
    static struct A obj; 

    if (obj.b==NULL) 
     printf(" obj.b auto Initialized\n"); 

    return 0; 
} 

给我的输出。

obj.b auto Initialized 

这是否意味着条款6.7.9-> 10适用于结构对象的所有成员?

注:重点在引文是我

回答

3

是的,这是正确的,也注意到有关聚合类型的条款:

,如果它是一个聚集,每个成员被初始化(递归)根据这些规则, 和任何填充被初始化为零位;

这意味着每个成员都被初始化为该类型的零值,如果该成员是另一个结构体,则其成员在相同规则下初始化。

+0

'初始化为该类型的零值'是优雅的。 +1 – sjsam

3

这是否意味着条款6.7.9-> 10适用于结构对象的所有成员?

是的。子对象与它们所属的对象具有相同的存储持续时间。

+0

请您能引用标准吗? – sjsam

+0

@sjsam除了* object *的定义之外,没有其他的东西需要引用。在你的代码中'obj.b'是一个对象。 –

+0

谢谢!我看到我现在问的不是真正的问题:P – sjsam