关于C语言中的数组初始化的困惑

时间:2019-03-13 10:29:46

标签: c arrays

我编写了这段代码并运行:

#include <stdio.h>

int i;
int a[] = { 1 };

int main()
{
    for (i = 0; i < 10; i++)
        printf("%d\n", a[i]);
};

它总是给我以下结果

1
0
2
0
0
0
0
0
0
0

我知道a[]的长度为1,而a[1],a[2]...的长度不正确。但是我再次对其进行了重新编译,最后我发现a[2]总是给2,我对2感到困惑,它是从哪里来的,为什么a[2]不是这样其他数字,例如0或某个随机数?

1 个答案:

答案 0 :(得分:4)

这样做的时候

int a[] = { 1 };

数组中的元素数将自动调整为等于初始化程序中的元素数。在这种情况下,初始化程序包含1个整数,因此您的代码等效于:

int a[1] = { 1 };

您有一个长度为1的数组,但是在for循环中,您正在其中访问10个项目(即,访问a[0]a[1],... a[9])。这是未定义的行为,您看到的是数组末尾的数据。