C语言中初始化数组时重定义下标元素,数组正确内容是什么?
C语言数组初始化问题解析
问题
在C语言中,使用int a[] = {4 , 9, 1, 8, [0]=5, 7};初始化数组后,数组a[]的正确内容是什么?
测试代码
int main () { int a[] = {4 , 9, 1, 8, [0]=5, 7}; for(int i = 0; i < 10; i++) { printf("%d\n", a[i]); } return 0; }
(注:原代码中printf的换行符存在格式问题,已修正为标准的\n)
测试输出
5 7 1 8 -1558310176 712
(注:输出中后几位为超出数组长度的栈内存垃圾值,无实际意义)
可选答案
- a) 5, 9, 1, 8, 7
- b) 4, 9, 1, 8, 5, 7
- c) 5, 4, 9, 1, 8, 7
- d) 4, 9, 1, 8, 7
- e) 4, 9, 1, 8, 0, 5, 7
解析与结论
根据C语言的**指定初始化器(Designated Initializers)**规则:
- 未指定下标的元素按顺序填充数组,初始的
4,9,1,8分别对应a[0]=4、a[1]=9、a[2]=1、a[3]=8; - 指定下标
[0]=5会覆盖a[0]的原有值,将其改为5; - 后续未指定下标的元素
7,会被放在当前已使用的最大下标(3)的下一个位置,即a[4]=7。
因此数组a的有效元素为5,9,1,8,7,对应选项a)。
内容的提问来源于stack exchange,提问作者RDE
相关产品推荐
相关产品推荐

