2

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 とコンパイラが異なるためです。

4

8 に答える 8

8

これは、引用した出力の直後の段落からの、その本からの引用です。

values配列内の 5 つの要素 (要素 1、4、および 6 ~ 8) に割り当てたvaluesことがないため、それらに対して表示される は無意味です。プログラムの出力ではこれらの値がゼロとして表示されますが、初期化されていない変数または配列要素の値は定義されていません。このため、初期化されていない変数または配列要素の値に関して、仮定を行うべきではありません。

教訓: プログラミングの本を実際に読むと、より多くのことを学ぶことができます。

于 2013-07-17T22:15:35.570 に答える
0

配列を初期化します。配列を初期化していないため、ガベージ値で埋められています。次のようにします。

int values[10] = {0};

常に変数を初期化することをお勧めします。そして、あなたの本も変えることをお勧めします。" C - How to Program by Dietel & Dietel "を試してみてください。

于 2013-07-17T20:22:25.223 に答える