不理解这个C程序的输出结果

5
这是代码:

#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

我不明白为什么value[8]会返回1784505816?难道value[8]不应该等于value[6]和value[7]都等于0吗?顺便说一下,我是在Mac OS X Lion下通过gcc编译的代码。
2个回答

20

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

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


8
如果您使用int value[10] = {};,那么它们将被初始化为零。 - C. K. Young
5
@ChrisJester-Young: 你的意思是 {0}。这是一个 C 语言问题。 - CB Bailey
@CharlesBailey: +1 哇,好主意。我看到{}是gcc的扩展(当使用-pedantic编译时,会出现“warning: ISO C forbids empty initializer braces”警告消息)。(可惜现在对我的评论来说已经太晚了,唉。) - C. K. Young
1
它的内容未定义。标准使用术语“不确定”,而不是“未定义”。请参见此处:Fun with uninitialized variables and compiler (GCC) - Nawaz

6

没有初始化程序的自动存储期对象在分配之前具有不确定的值。从技术上讲,使用具有不确定值的对象的值(例如打印int)会导致未定义的行为。

如果您希望将数组初始化为零,则需要提供初始化程序。例如:

int value[10] = {0};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接