gpt4 book ai didi

c - 结构数组,指定初始化器蕴涵

转载 作者:太空狗 更新时间:2023-10-29 16:11:34 26 4
gpt4 key购买 nike

我已经知道了:

1) 数组“部分初始化”

int array[10] = {1};

导致数组 [0] 初始化为值 1,所有其他数组值初始化为 0。

2) 指定初始化器

struct metadata {
int val0;
int val1;
char *name;
};

void func(void){
struct metadata my_metadata = { .val0 = 1 };

结果是用 1 初始化 my_metadata.val0,用 0 初始化 my_metadata.val1,用 NULL 初始化 my_metadata.name。

3) 问题来了:

struct metadata {
int val0;
int val1;
char *name;
};

void func(void){
struct metadata my_metadata_array[2] = { {.val0 = 1} };

这个操作的结果是什么?

奖励问题 1:有人可以指点我“部分初始化”的引用文档吗(我不知道它是编译器扩展还是特定标准版本的一部分)?

奖励问题 2:与“指定初始值设定项”的奖励问题 1 相同。

最佳答案

就像在“部分初始化”中一样,第一个 metadata 元素将被初始化为 val0 元素设置为 1,该元素和第二个元素中的所有其他元素都将被初始化默认初始化(或与具有静态持续时间的对象相同)。

好处 1:它已经成为标准的一部分

C 标准 6.7.9-21:

If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.

好处 2:它是 C99 的一部分

C 标准 6.7.9-7

If a designator has the form . identifier then the current object (defined below) shall have structure or union type and the identifier shall be the name of a member of that type.

关于c - 结构数组,指定初始化器蕴涵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com