前に学習したように構造体の初期化は、以下のように行う。
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} で初期化しているのが良く分かる。