如果我在 C 中的同一数组内重新定义数组的值,数组的新内容是什么?

RDE*_*RDE 3 c arrays swap integer

a[]的内容是什么?

int a[ ] = {4 , 9, 1, 8, [0]=5, 7};
Run Code Online (Sandbox Code Playgroud)

我尝试用以下方法打印它:

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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

5
7
1
8
-1558310176 
712 
Run Code Online (Sandbox Code Playgroud)

虽然可用的答案选择是:

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
Run Code Online (Sandbox Code Playgroud)

dbu*_*ush 5

当为聚合类型(即数组、结构体或联合)指定初始值设定项时,将按顺序应用子对象的初始值设定项。

给定这个初始值设定项:

int a[ ] = {4 , 9, 1, 8, [0]=5, 7};
Run Code Online (Sandbox Code Playgroud)

数组元素 0 - 3 首先分别用值 4、9、1、8 进行初始化。然后指定的初始化器[0]=5将数组元素 0 初始化为 5,覆盖之前的初始化 4。这使得当前子对象元素为 0,因此下一个初始化器适用于之后的下一个对象,即索引 1。然后导致索引 1 为使用值 7 进行初始化,覆盖之前的初始化值 9。

因此,上面的初始化程序创建了一个由int4 个元素组成的数组,并用值 5、7、1、8 进行初始化。

另外,假设您在数组仅包含 4 个元素时打印 10 个元素,则在尝试读取超出数组末尾的内容时会调用未定义的行为。