前に学習したように構造体の初期化は、以下のように行う。
struct タグ名 変数名 = { 値, 値, ...}; |
例 3 struct Point { int x; int y; }; struct Point a = { 2, 3}; |
構造体変数の初期化は、変数の宣言時には常に行うことが出来る点に注意しよう。
では、構造体が構造体を含む場合の初期化は、本当はどうすれば良いのだろうか? 次の例を見てみよう。
例 4 struct Point { int x, y; }; struct Triangle { struct Point t1, t2, t3; }; struct Triangle tri = { 0,0, 1,1, 2,2 }; |
struct triangle 型の構造体変数 a は、struct Point 型の 構造体メンバー t1, t2, t3 を含み、struct Point 型は整数の メンバー x, y を含むので、結局構造体変数 tri は、6個の整数を含んで いる事が分かる。従って、この例 4 の最後の行のように、6 個の整数で初期化する 事も出来る。しかし、この例は少し分かりにくいし、struct Triangle 型が 3つのメンバーを持っている事が、この初期化では見えない。実際に、 struct Point 型の変数の初期化は次のように行うことを学んだ。
strcut Point z = { 1, 2};
従って、struct Triangle 型の変数を初期化する時は、上の初期化を 3個行う と考えた方が自然であろう。即ち、正式な初期化は次のようにする。
例 5 struct Triangle tri = { {0,0}, {1,1}, {2,2} }; |
この方法だと、struct Triangle 型の変数 tri の 3 つのメンバーを、
{0,0}
と {1,1}
と {2,2}
で初期化しているのが良く分かる。