在代码中: ...
#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
答案 0 :(得分:3)
在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)
注意:某些实现可能会抱怨完全合法的数组初始化时缺少大括号。这是那些实现的问题。
答案 1 :(得分:3)
如果使用初始化程序定义对象,则将其初始化为指定值。如果您只为某些成员指定值,则其他成员初始化为零(对于整数(包括字符)表示0
,对于浮点值表示0.0
,对于指针表示NULL
。
如果您定义一个没有初始值设定项的对象,则所有成员都隐式初始化为零如果该对象具有静态存储持续时间,即,如果它在任何函数之外定义,或者如果它&# 39; s使用static
关键字定义。
在没有static
关键字的函数内定义的对象具有自动存储持续时间。如果没有显式初始化,这些对象将从垃圾值开始。 (如果您碰巧看到这些对象看似初始化为零,请记住零可以与其他任何东西一样多。)
你问:
默认情况下,整数字段(数字和年份)是否初始化为0 当其他char字段被初始化但不是这两个?
但您问题中的代码并未初始化char[]
字段。请参阅pmg's answer,其中显示了一些很好的示例,但目前没有提到static
与自动区分。
答案 2 :(得分:-1)
为了安全起见,您应该自己将变量初始化为0,具体取决于编译器可能会选择垃圾值