C#における「初期化」と「代入」の違いをわかりやすく解説
C#プログラミングにおいて、「初期化」と「値の代入(アサイン)」は似ているようで異なる概念です。この記事では、両者の違いを配列を例にしてわかりやすく解説します。
配列の宣言
まず、配列を宣言するコードを見てみましょう。
int[] n; // 宣言
このように宣言しただけでは、配列はメモリ上でまだ使用可能な状態になっていません。宣言はあくまで「配列変数の存在」をコンパイラに伝えるだけです。
初期化とは
配列変数を初期化すると、メモリ上に実体が確保され、そこへ値を代入できるようになります。
重要なポイントとして、C#において配列は参照型です。そのため、newキーワードを使って明示的にインスタンスを生成する必要があります。
int[] n = new int[10]; // 初期化
値の代入とは
初期化された配列に対して、実際の値を設定するのが代入です。個々の配列要素には、インデックス番号(添字)を指定してアクセスします。
n[0] = 100; n[1] = 200;
インデックスは0から始まるため、最初の要素はn[0]、2番目の要素はn[1]となります。
宣言・初期化・代入を1行で行う
C#では、これらの一連の操作を1行にまとめて記述することもできます。
int[] n = new int[10] {100, 200, 300, 400, 500};
このように書くことで、コードが簡潔になり、可読性も向上します。なお、初期化子(波括弧内の値)を指定する場合は、要素数を省略して次のように書くことも可能です。
int[] n = new int[] {100, 200, 300, 400, 500};
// さらに省略して
int[] n = {100, 200, 300, 400, 500};
既定値による自動初期化
newキーワードで配列を作成すると、C#コンパイラは配列の型に応じて、各要素を自動的に既定値で初期化します。
intなどの数値型 →0bool型 →false- 参照型(クラスなど)→
null
例えば、int型の配列の場合、すべての要素は自動的に0に初期化されます。この仕組みにより、初期化直後の配列に対して未定義の値が残ることはありません。
まとめ
「宣言」は変数の存在を示すだけであり、「初期化」はnewによってメモリ上に実体を確保すること、「代入」は確保された要素に具体的な値を設定することです。この違いを理解しておくと、NullReferenceExceptionなどのエラーを防ぎ、より安全なコードを書けるようになります。
-
C#の配列とリスト(List)の違いとは?特徴と基本的な使い方を解説
C#における配列(Array)とリスト(List<T>)は、どちらも複数のデータをまとめて扱うためのコレクションですが、その性質には重要な違いがあります。 配列とリストの主な違い 配列は、生成時にサイズが固定される、同じ型の要素を順番に格納するコレクションです。一度作成した後は要素数を変更できません。 一方、Listはジェネリックコレクションであり、要素の追加や削除に応じてサイズが自動的に拡張・縮小します。この柔軟性が最大の特徴です。 項目配列List<T> サイズ固定可変(動的) 要素の追加不可(再作成が必要)Addメソッドで可能 宣言方法型[] 変数名Lis
-
Pythonのリストと配列(array)の違いとは?使い分けのポイントを解説
Pythonのリストと配列、何が違うのか?Pythonでデータを扱う際、「リスト(list)」と「配列(array.array)」はどちらもよく使われるデータ構造ですが、それぞれ特徴が大きく異なります。この記事では、両者の違いと使い分けのポイントをわかりやすく解説します。リスト(list):柔軟性が高い万能型Pythonのリストは非常に柔軟なデータ構造です。最大の特徴は、異なる型のデータを混在させて格納できる点にあります。例えば、以下のように整数・文字列・ネストしたリストなどを自由に組み合わせられます。[1, a, [1, 2], string]また、リストへの要素追加(append)は償却定