【发布时间】:2017-09-14 16:54:05
【问题描述】:
在这里,我已经像这样初始化数组:
#include <stdio.h>
int main()
{
int a[10] = {1, 2, 3, [7] = 4, 8, 9};
printf("a[7] = %d\na[8] = %d\na[9] = %d\n", a[7], a[8], a[9]);
return 0;
}
输出:
a[7] = 4
a[8] = 8
a[9] = 9
在这里,我选择了数组索引7 作为a[7] = 4,然后添加了一些元素。然后打印索引7、8和9的数组元素并正确打印。
那么,在没有明确定义的情况下,索引8 和9 的输出是否正确?
为什么序列不是从索引3开始?
【问题讨论】:
-
这在 C99(和 C90 中的 gcc)中是允许的:gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html;另见drdobbs.com/the-new-c-declarations-initializations/184401377
-
注意它在 C++ 中是不允许的:这是语言分歧的另一个点。
-
这可能是允许的,但请不要经常这样做,(永远不会好:)。
标签: c arrays initialization initializer-list designated-initializer