数组的奇数输出

And*_*olm 2 c arrays

我在Stephen G. Kochan的"Programming in C"一书中学习了Arrays.尽管很长时间试图找到语法错​​误,但我已经达到了我对输出感到困惑的程度.

这是我的代码:

#include <stdio.h>

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

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

    for ( index = 0; index < 10; ++index )
        printf("values[%i] = %i\n", index, values[index]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据书中输出应该如何显示:

values[0] = 197
values[1] = 0
values[2] = -101
values[3] = 547 
values[4] = 0 
values[5] = 350 
values[6] = 0 
values[7] = 0 
values[8] = 0 
values[9] = 35
Run Code Online (Sandbox Code Playgroud)

我的输出如何:

values[0] = 197
values[1] = -2
values[2] = -101
values[3] = 547
values[4] = 4200832
values[5] = 350
values[6] = 4200926
values[7] = 4200832
values[8] = 7680288
values[9] = 35
Run Code Online (Sandbox Code Playgroud)

这就像所有的零(未初始化的值)已被这些大数字所取代.发生了什么,怎样才能改变它?

UPDATE

Peter Griffiths提到了这一点,这是Stephen G. Kochan撰写的"Programming in C 3rd edition"一书中引用的:

因为您从未为数组中的五个元素(元素1,4和6到8)分配值,所以为它们显示的值毫无意义.即使程序的输出将这些值显示为零,也未定义任何未初始化的变量或数组元素的值.因此,不应该对未初始化的变量或数组元素的值进行假设.

这清楚地表明这本书没有任何问题.所以这不是一本不好的书!只有很好的体验!

我使用的是Windows 7 Home Premium 64位,我使用的是gcc(GCC)4.7.2编译器.输出不同的原因可能是操作系统和编译器不同.

Cro*_*man 8

下面是这本书报价,从段落马上你引用的输出如下:

因为你从未分配values过数组中的五个元素 - 元素1,4和6到values8--为它们显示的元素是没有意义的.即使程序的输出将这些值显示为零,也未定义任何未初始化的变量或数组元素的值.因此,不应该对未初始化的变量或数组元素的值进行假设.

道德:当你真正阅读它们时,你会从编程书中获得更多.


Pie*_*aud 7

在C中,默认情况下不会初始化数组的元素.

试一试 :

int values[10] = {0};
Run Code Online (Sandbox Code Playgroud)

在编程中,假设每个非初始化指针和非指针变量都包含垃圾是一个好习惯.

编辑: 如果这本书不解释你...我会做其他人一样,建议你找一本新书....... 看来本书实际上谈的是你可能会发现的未初始化变量的垃圾值......