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」からの引用であるこれについて言及しています。
配列内の 5 つの要素 (要素 1、4、および 6 ~ 8) に値を割り当てていないため、これらの要素に対して表示される値は無意味です。プログラムの出力ではこれらの値がゼロとして表示されますが、初期化されていない変数または配列要素の値は定義されていません。このため、初期化されていない変数または配列要素の値に関して、仮定を行うべきではありません。
これは、本に何の問題もないことを明確に述べています。それは悪い本ではありません!これまでのところ良い経験のみ!
Windows 7 Home Premium 64 ビットを使用しており、gcc (GCC) 4.7.2 コンパイラを使用しています。出力が異なる理由は、おそらく OS とコンパイラが異なるためです。