6.7.8 初期化
指示付き初期化子は、数値プログラミングで一般的なスパース配列を初期化する仕組みです。
指示付き初期化子によって、システムプログラミングで一般的なスパース構造体を初期化したり、先頭メンバーであるかどうかに関係なく、任意のメンバーを使って共用体を初期化したりできます。
例を挙げて考えてみます。最初の例は、指示付き初期化子を使って配列を初期化する方法を示しています。
enum { first, second, third }; const char *nm[] = { [third] = "third member", [first] = "first member", [second] = "second member", }; |
次の例は、指示付き初期化子を使用して struct オブジェクトのフィールドを初期化する方法を示しています。
division_t result = { .quot = 2, .rem = -1 }; |
次の例は、指示付き初期化子を使用して、これ以外の方法では誤解を生むおそれがある複雑な構造体を初期化する方法を示しています。
struct { int z[3], count; } w[] = { [0].z = {1}, [1].z[0] = 2 }; |
1 つの指示子で両端から配列を作成することができます。
int z[MAX] = {1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0}; |
MAX が 10 より大きい場合、この配列の中央には値ゼロの要素が含まれます。MAX が 10 より小さい場合、最初の 5 つの初期化子が提供する値の一部は、2 つ目の 5 つの値によって置き換えられます。
共用体のすべてのメンバーを初期化することができます。
union { int i; float f;} data = { .f = 3.2 }; |