- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经知道了:
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/
我是一名优秀的程序员,十分优秀!