我编写了这段代码并运行:
#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
或某个随机数?
答案 0 :(得分:4)
这样做的时候
int a[] = { 1 };
数组中的元素数将自动调整为等于初始化程序中的元素数。在这种情况下,初始化程序包含1个整数,因此您的代码等效于:
int a[1] = { 1 };
您有一个长度为1的数组,但是在for循环中,您正在其中访问10个项目(即,访问a[0]
,a[1]
,... a[9]
)。这是未定义的行为,您看到的是数组末尾的数据。