繁体   English   中英

C struct自动初始化值,数组初始化

[英]C struct automatic initialization values, array initializations

如果我要有两个结构

typedef struct {
  int number_of_lines;
  char lines[MAX_CHAPTER_LINES][MAX_STR_SIZE + 1];
} Chapter;

typedef struct {
  char name[MAX_STR_SIZE + 1];
  int number_of_chapters;
  Chapter chapters[MAX_CHAPTERS];
} Book;

我创建了一个Chapter变量:

Chapter x1;

它的两个成员的值将被初始化为什么? 是垃圾吗? 还是零? 在我的代码中, int 0 ,但我的TA告诉我这将是垃圾吗?

另外,如果我要声明一个章节数组:

Chapter chapters[30];

它会被30个结构包含0 / NULL值的元素填充吗? 还是用垃圾值元素初始化?

这取决于。 除非明确初始化,

  • 如果变量具有静态(或线程)存储持续时间,则成员将被初始化为0或等效值。

  • 如果它具有自动存储期限,则内容将不确定(是的, “不确定”“垃圾”更合适)。

引用C11 ,第§6.7.9/ p10章

如果未自动初始化具有自动存储期限的对象,则其值不确定。 如果未明确初始化具有静态或线程存储持续时间的对象,则:

—如果具有指针类型,则将其初始化为空指针;

—如果具有算术类型,则将其初始化为(正数或无符号)零;

—如果是集合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位;

—如果它是一个联合,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM