【问题标题】:What value have int fields in struct not initialized yet?struct 中的 int 字段尚未初始化什么值?
【发布时间】:2014-06-22 02:55:42
【问题描述】:

在代码中: ...

 #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,但我不确定这是一般规则,所以我必须确定!

最好的问候, 爸爸

【问题讨论】:

  • 视情况而定,您没有提供足够的信息来回答。
  • 这取决于bkStruct是否具有自动或静态存储时长。
  • 看看使用new时对象的初始化。它们也适用于堆栈上对象的初始化。 stackoverflow.com/a/620402/434551
  • @RSahu:OP 标记为c 语言,而不是c++c 语言中没有 new 关键字。

标签: c struct char int


【解决方案1】:

在 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} 是个问题。不过,这不是错误,或者至少不是不符合标准——只要它是警告而不是致命错误。
  • 如果struct book book1;出现在函数之外,是不是所有位都初始化为零?
  • @chux:它被初始化为 zero(对于整数递归定义为 0,对于浮点定义为 0.0,对于指针定义为 NULL),其中可能会也可能不会被表示为所有位为零(尽管很可能是)。
【解决方案2】:

如果你用初始化器定义一个对象,它会被初始化为指定的值。如果您只为某些成员指定值,则其他成员将初始化为零(意味着 0 用于整数(包括字符),0.0 用于浮点值,NULL 用于指针)。

如果你定义一个没有初始化器的对象,所有成员都被隐式初始化为零如果该对象具有静态存储持续时间,即,如果它是在任何函数之外定义的,或者如果它是用@987654325 定义的@关键字。

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

你问:

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

但您问题中的代码并未初始化 char[] 字段。请参阅pmg's answer,它展示了一些很好的示例,但目前没有提到static 与自动区分。

【讨论】:

    【解决方案3】:

    为了安全起见,您应该根据编译器自己将变量初始化为 0,它也可能会选择垃圾值

    【讨论】:

    • 这并不能真正回答问题。
    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 2021-10-27
    • 2021-12-29
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多