我的目的是确保将 b 初始化为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适用于结构对象的所有成员?
注意:引文中的重点是我的
答案 0 :(得分:3)
是的,这是正确的,还要注意有关聚合类型的条款:
如果是聚合,则根据这些规则初始化(递归)每个成员, 并且任何填充都被初始化为零位;
这意味着每个成员都初始化为该类型的零值,如果该成员是另一个结构,则其成员在同一规则下初始化。
答案 1 :(得分:3)
这是否意味着条款6.7.9-> 10适用于结构对象的所有成员?
是。子对象与它们所属的对象具有相同的存储持续时间。