我在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编译器.输出不同的原因可能是操作系统和编译器不同.
下面是这本书报价,从段落马上你引用的输出如下:
因为你从未分配
values过数组中的五个元素 - 元素1,4和6到values8--为它们显示的元素是没有意义的.即使程序的输出将这些值显示为零,也未定义任何未初始化的变量或数组元素的值.因此,不应该对未初始化的变量或数组元素的值进行假设.
道德:当你真正阅读它们时,你会从编程书中获得更多.
在C中,默认情况下不会初始化数组的元素.
试一试 :
int values[10] = {0};
Run Code Online (Sandbox Code Playgroud)
在编程中,假设每个非初始化指针和非指针变量都包含垃圾是一个好习惯.
编辑:
如果这本书不解释你...我会做其他人一样,建议你找一本新书.......
看来本书实际上谈的是你可能会发现的未初始化变量的垃圾值......