なぜ私はこれをしなければならないのですか?[人] [市] [年] = 1000;もの?なぜ私は配列を初期化する必要がありますか?
int People[2059][100];
for (int city = 0; city < 2059; city++)
for (int years = 0; years < 100; years++)
People[city][years] = 1000;
なぜ私はこれをしなければならないのですか?[人] [市] [年] = 1000;もの?なぜ私は配列を初期化する必要がありますか?
int People[2059][100];
for (int city = 0; city < 2059; city++)
for (int years = 0; years < 100; years++)
People[city][years] = 1000;
これは必須ではありません。しかし、People
配列には不確定な値が含まれており、それらを読み取ると未定義の動作のプログラムが作成されます(自動保存期間を持つ変数であると仮定しています)。これはあまり有用なプログラムではありません。
アレイに静的記憶期間がある場合は、ゼロで初期化されます。あなたがそれで大丈夫なら、それをループしてすぐに値を割り当てる必要はありません。
このライン:
People[city][years] = 1000;
は、スタック上1000
にあなたの2D配列の値を初期化します。配列内の数値を初期化しない場合は、何でもかまいません。代わりに、あなたは、配列をループを有する節約
int People[2059][100] = {{0}}; /* or 1000, if you prefer that */
これを使用して0
にすべての値を割り当てる:
代わりに、あなたはPeople
0
にして数値を初期化することができます。他の数字を挿入する場合は、配列を初期化する必要はありません。
変数を初期化しない場合、変数にはランダムな値が含まれます。これについて気にしなければ、配列を初期化する必要はありません。 –
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
初期化されていない非静的ローカル(a.k.a. "自動")変数は、*不確定*値を持ちます。値を読み込むためにそれらを使用すると、C++で*未定義の動作*につながります。 Cでは、トラップ値でない限り、その価値を読み取ることは合法です。 –