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

时间:2014-05-05 17:56:32

标签: c struct char 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

3 个答案:

答案 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,具体取决于编译器可能会选择垃圾值