next up previous contents
Next: 20.3 構造体の配列の初期化 Up: 20. 構造体 III Previous: 20.1.3 構造体の隠蔽

20.2 構造体が構造体を含む場合の初期化

前に学習したように構造体の初期化は、以下のように行う。

        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} で初期化しているのが良く分かる。



Noriyo Kanayama