初期化指定子 は、データ・オブジェクトの初期値を指定する、デー タ宣言のオプションの部分です。 特定の宣言に使用できる初期化指定子は、初期化されるオブジェクトの型およびストレージ・クラ スによって異なります。
各データ型の初期化特性および特別な要件は、そのデータ型のセクションに記述されています。
初期化指定子は、= 記号と、その後に続く、初期式 expression、またはコンマで分離された初期式の中括弧で囲まれたリストで 構成されます。 個々の式は、コンマで分離される必要があります。式のグループは中括弧で囲み、コンマで分離す ることができます。 文字ストリングの初期化指定子がストリング・リテラルの場合は、中括弧 ({ }) はオプションです。 初期化指定子の数は、初期化されるエレメントの数よりも多くてはなりません。 初期式は、データ・オブジェクトの最初の値に評価されます。
算術型またはポインター型に値を代入するには、単純初期化指定子 = expression を使用します。 例えば、次のデータ定義は、初期化指定子 = 3 を使用して、 group の初期値を 3 に設定します。
int group = 3;
共用体、構造体、および集合体クラス (コンストラクター、基底クラス、仮想関数、または private か protected メンバーがないクラス) の場合は、初期式のセットは、初期化指定子が ス トリング・リテラルでない限り、中括弧で囲む必要があります。
中括弧で囲まれた初期化指定子リストを使用して初期化された配列、構造体、または共用体では 、初期化されないメンバーまたは添え字を適切な型のゼロに暗黙で初期化します。
例
次の例では、配列 grid の最初の 8 つのエレメントのみが、明示的に初期化されま す。 明示的に初期化されない残りの 4 つのエレメントは、明示的にゼロに初期化されたかのように初期 化されます。
static short grid[3] [4] = {0, 0, 0, 1, 0, 0, 1, 1};
grid の初期値は、次のとおりです。
エレメント | 値 | エレメント | 値 |
---|---|---|---|
grid[0] [0] | 0 | grid[1] [2] | 1 |
grid[0] [1] | 0 | grid[1] [3] | 1 |
grid[0] [2] | 0 | grid[2] [0] | 0 |
grid[0] [3] | 1 | grid[2] [1] | 0 |
grid[1] [0] | 0 | grid[2] [2] | 0 |
grid[1] [1] | 0 | grid[2] [3] | 0 |
このセクションでのここから先の説明は、C++ だけに適用されます。
C++ では、ネーム・スペース・スコープで定数以外の式を指定して、変数を初期化できます。 C では、グローバル・スコープでこれと同じことを行うことはできません。
コードが初期化を含む宣言をジャンプする場合は、コンパイラーはエラーを生成します。 例えば、次のコードは無効です。
goto skiplabel; // error - jumped over declaration int i = 3; // and initialization of i skiplabel: i = 4;
外部、静的、および自動定義内のクラスを初期化できます。 初期化指定子には、= (等号) と、その後に続く、中括弧で囲まれ、コンマで区切られ た値のリストが含まれます。 クラスのすべてのメンバーを初期化する必要はありません。
関連参照