不明白这个C程序的输出

时间:2011-09-22 07:19:31

标签: 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; index < 10; ++index)
        printf("value[%i] = %i\n", index, value[index]);
    return 0;
}

这是编译时的输出:

value[0] = 197
value[1] = 0
value[2] = -101
value[3] = 547
value[4] = 0
value[5] = 350
value[6] = 0
value[7] = 0
value[8] = 1784505816
value[9] = 35

我不明白为什么价值[8]会返回1784505816? 不是值[8]假设是=值[6] =值[7] = 0?顺便说一句,我在Mac OS X Lion下通过gcc编译代码。

2 个答案:

答案 0 :(得分:20)

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

同样适用于value[1]value[4]value[6]value[7]。但他们恰好是零。

答案 1 :(得分:6)

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

如果要将阵列初始化为零,则需要提供初始化程序。 E.g。

int value[10] = {0};