首页 >后端开发 >C++ >C 和 C 中的自动结构和数组如何部分初始化?

C 和 C 中的自动结构和数组如何部分初始化?

DDD
DDD原创
2024-12-19 05:32:21189浏览

How are Automatic Structures and Arrays Partially Initialized in C and C  ?

C 和 C 中自动结构体和数组的部分初始化

GNU C 参考手册指出,如果结构体变量未初始化,其成员的价值观是不确定的。但是,标准没有定义结构体或数组的部分初始化。

部分初始化术语

“部分初始化”是指为以下对象提供一些但不是全部初始化器聚合(数组或结构)。

自动结构和的初始化规则数组

C 和 C 标准为自动结构体和数组的初始化指定了以下规则:

  • 如果聚合已完全初始化(即,有足够的初始化器所有元素或成员),已初始化的元素/成员被分配指定的值,而其余元素/成员为零初始化(对于整型)或NULL 初始化(对于指针类型)。
  • 如果聚合未初始化,则所有元素/成员都是不确定的。

部分初始化行为

尽管标准中没有明确定义部分初始化,但所有主流编译器都遵循以下规定行为:

  • 对于自动数组,如果初始化器的数量少于数组的大小,则未初始化的元素将初始化为 0。
  • 对于自动结构体,如果初始化器的数量少于数组的大小比结构成员的数量,未初始化的成员被值初始化。在 C 中,这意味着类数据成员默认初始化,而非类数据成员零初始化。

示例

以下 C代码部分初始化一个结构体:

struct S {
    int a;
    char* b;
    int c;
};

S s = {1, "asdf"};

在此示例中,s.a 被初始化为1、s.b 被初始化为“asdf”,而 s.c 因未显式初始化而为零初始化。

以上是C 和 C 中的自动结构和数组如何部分初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn