struct中的int字段没有初始化的值是多少?

在代码中:…

#define MAXELEMNTS 100 struct book { int number; char name[31]; char author[31]; int year; char publisher[31]; }; struct book bkStruct[MAXELEMENTS]; 

在初始化其他char字段时,默认情况下整数字段(数字和年份)是否初始化为0但不是这两个? 或者他们有神知道什么价值? 根据我的经验,他们确实有值= 0,但我不确定这是一般规则所以我必须确定!

最好的问候,Papo

在C中没有“部分初始化”之类的东西。 如果通过为单个成员指定值来初始化结构,则会自动初始化所​​有其他成员(为正确类型的0 )。

 struct book { int number; char name[31]; char author[31]; int year; char publisher[31]; }; struct book book1; // no initialization struct book book2 = { .author = "pmg" }; // initialization of ALL of book2 struct book bkStruct1[MAXELEMENTS]; // uninitialized array struct book bkStruct2[MAXELEMENTS] = {0}; // initialized array // (every member of every element) 

注意:某些实现可能会抱怨完全合法的数组初始化时缺少大括号。 这是那些实现的问题。

如果使用初始化程序定义对象,则将其初始化为指定值。 如果只为某些成员指定值,则其他成员初始化为零(对于整数(包括字符)表示0 ,对于浮点值表示0.0 ,对于指针表示NULL )。

如果定义没有初始化程序的对象, 则如果对象具有静态存储持续时间,即如果它在任何函数外部定义或者使用static关键字定义,则所有成员都会隐式初始化为零。

在没有static关键字的函数内定义的对象具有自动存储持续时间 。 如果没有显式初始化,这些对象将从垃圾值开始。 (如果你碰巧看到这些对象看似初始化为零,请记住零可以和其他任何东西一样多。)

您询问:

在初始化其他char字段时,默认情况下整数字段(数字和年份)是否初始化为0但不是这两个?

但是你问题中的代码没有初始化char[]字段。 请参阅pmg的答案 ,其中显示了一些很好的例子,但目前没有提到static与自动的区别。

为了安全起见,你应该将你的varibales初始化为0,这取决于编译器它可能会选择垃圾值