Don';我不理解这个C程序的输出

Don';我不理解这个C程序的输出,c,C,代码如下: #include <stdio.h> int main (void) { int value[10]; int index; value[0] = 197; value[2] = -100; value[5] = 350; value[3] = value[0] + value[5]; value[9] = value[5] / 10; --value[2]; for(index = 0; in

代码如下:

#include <stdio.h>

int main (void)
{
    int value[10];
    int index;

    value[0] = 197;
    value[2] = -100;
    value[5] = 350;
    value[3] = value[0] + value[5];
    value[9] = value[5] / 10;
    --value[2];

    for(index = 0; index < 10; ++index)
        printf("value[%i] = %i\n", index, value[index]);
    return 0;
}
我不明白为什么值[8]返回1784505816?
值[8]不应该是=值[6]=值[7]=0吗?顺便说一下,我在Mac OS X Lion下通过gcc编译代码。

值[8]
从未初始化,因此其内容未定义,可以是任何内容


这同样适用于
值[1]
值[4]
值[6]
值[7]
。但是它们恰好是零。

在没有初始值设定项的情况下声明了自动存储持续时间的对象在被分配到之前具有不确定的值。从技术上讲,它会导致未定义的行为使用具有不确定值的对象的值(例如打印int)

如果希望将数组初始化为零,则需要提供初始值设定项。例如

int value[10] = {0};

但是如果您使用
int-value[10]={}
,那么它们的初始值将为零。@ChrisJester-Young:你的意思是
{0}
。这是一个C问题。@CharlesBailey:+1哇,打得好。我看到,
{}
是一个gcc扩展(当使用
-pedantic
编译时,您会收到一条“警告:isoc禁止使用空的初始值设定项大括号”消息)。(唉,现在编辑我的评论已经太晚了。)
它的内容没有定义
?本标准使用术语“不确定”,而非“未定义”。见此:
int value[10] = {0};