[英]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.