2017-02-05 12 views
-1

なぜ私はこれをしなければならないのですか?[人] [市] [年] = 1000;もの?なぜ私は配列を初期化する必要がありますか?

int People[2059][100]; 
for (int city = 0; city < 2059; city++) 
for (int years = 0; years < 100; years++) 
People[city][years] = 1000; 
+2

変数を初期化しない場合、変数にはランダムな値が含まれます。これについて気にしなければ、配列を初期化する必要はありません。 –

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

初期化されていない非静的ローカル(a.k.a. "自動")変数は、*不確定*値を持ちます。値を読み込むためにそれらを使用すると、C++で*未定義の動作*につながります。 Cでは、トラップ値でない限り、その価値を読み取ることは合法です。 –

答えて

1

これは必須ではありません。しかし、People配列には不確定な値が含まれており、それらを読み取ると未定義の動作のプログラムが作成されます(自動保存期間を持つ変数であると仮定しています)。これはあまり有用なプログラムではありません。

アレイに静的記憶期間がある場合は、ゼロで初期化されます。あなたがそれで大丈夫なら、それをループしてすぐに値を割り当てる必要はありません。

1

このライン:

People[city][years] = 1000; 

は、スタック上1000にあなたの2D配列の値を初期化します。配列内の数値を初期化しない場合は、何でもかまいません。代わりに、あなたは、配列をループを有する節約

int People[2059][100] = {{0}}; /* or 1000, if you prefer that */ 

これを使用して0にすべての値を割り当てる:

代わりに、あなたはPeople0にして数値を初期化することができます。他の数字を挿入する場合は、配列を初期化する必要はありません。

関連する問題