我在 Stephen G. Kochan 的“Programming in C”一书中学习数组。尽管长时间尝试查找语法错误,但我已经对输出感到非常困惑。
这是我的代码:
#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;
}
根据书中的输出应该如何看:
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
我的输出如何:
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
就像所有的零(未初始化的值)都被这些大数字取代了。这是怎么回事,我该如何改变它?
更新
Peter Griffiths 提到了这一点,引用自 Stephen G. Kochan 的《Programming in C 3rd edition》一书:
因为您从未为数组中的五个元素(元素 1、4 和 6 到 8)赋值,所以为它们显示的值毫无意义。即使程序的输出将这些值显示为零,但未定义任何未初始化变量或数组元素的值。出于这个原因,不应假设未初始化的变量或数组元素的值。
这清楚地表明这本书没有任何问题。所以这不是一本坏书!到目前为止只有好的体验!
我使用的是 Windows 7 Home Premium 64 位,并且我使用的是 gcc (GCC) 4.7.2 编译器。不同输出的原因可能是不同的操作系统和编译器。