web-dev-qa-db-ja.com

配列内のメンバーのデフォルト値は何ですか?

このような配列をインスタンス化します。

int array[] = new int[4];

これらの4つのメンバーのデフォルト値は何ですか? null、0、または存在しませんか?

28
dylanmensaert

0です。nullは有効なint値ではないため、nullにすることはできません。

C#5仕様のセクション7.6.10.4から:

新しい配列インスタンスのすべての要素は、デフォルト値(§5.2)に初期化されます。

セクション5.2から:

変数のデフォルト値は変数のタイプによって異なり、次のように決定されます。

  • 値型の変数の場合、デフォルト値は、値型のデフォルトコンストラクター(§4.1.2)によって計算された値と同じです。
  • 参照型の変数の場合、デフォルト値はnullです。

通常、デフォルト値への初期化は、メモリマネージャまたはガベージコレクタが使用のために割り当てられる前にメモリをall-bits-zeroに初期化することによって行われます。このため、null参照を表すためにall-bits-zeroを使用すると便利です。

(実装の詳細として、最初の箇条書きの周りにいくつかのトリッキーがあります。C#自体では、値型のパラメーターなしコンストラクターを宣言することはできませんが、canILの値型用に独自のパラメーターなしのコンストラクターを作成します。これらのコンストラクターは配列の初期化で呼び出されるとは思いませんが、で呼び出されますC#のnew X()式。ただし、実際にはC#仕様の範囲外です。)

50
Jon Skeet

配列要素やインスタンスフィールドなどのT型の自動初期化変数のデフォルト値は、default(T)の値と同じです。参照型およびポインター型の場合、nullです。数値型の場合、それはその型のゼロです。ブールについては、それは偽です。構造体型の場合、すべてのフィールドがデフォルト値に初期化されるのは構造体の値です。

15
Eric Lippert

整数をNULLにすることはできません。値は「0」になります。コードからNULLintを割り当てようとしても、それはできません。

0
Ron