next up previous contents
Next: 3. 初期化 Up: 18. 構造体 I Previous: 1. 構造体の宣言

2. 演算

構造体に許された演算は、 メンバーへのアクセスと、代入のみ である。 構造体変数から同じ型の構造体変数への一括代入があるのは非常に便利である。 一方、構造体のメンバーに関しては、そのメンバーの型に許された演算はすべて 許される。


例 5
        struct  point{
            float x;
            float y;
        } p1, p2;
        
        p1.x = 1.0;
        p1.y = 2.0;
        p2 = p1;

構造体変数のメンバーにアクセスするには、変数名の後ろにドットを置き、その後ろに メンバー名を書く。p1.x は、構造体変数 p1 のメンバー x と いう意味である。従って、例 5 は、構造体変数 p1 のメンバー x$1.0$ を代入し、次にメンバー y$2.0$ を代入している。更に次の行で、 構造体変数 p2 p1 を一括代入している。従って、 p2.x$1.0$p2.y$2.0$ になる。


例 6
        struct  seiseki{
            int bangou;
            int zenki;
            int kouki;
            int tuunen;
        } gakusei;
        
        gakusei.bangou = 100;
        gakusei.zenki  = 59;
        gakusei.kouki  = 74;

        gakusei.tuunen = ( gakusei.zenki + gakusei.kouki ) / 2.0;

        printf("学生番号[%d]: 通年成績 %d 点 \n", gakusei.bangou, gakusei.tuunen);

例 6 では、学生の前期、後期の成績をメンバーに代入した後、それらのメンバー を使って通年成績を計算している。このように、メンバーは、通常の変数と同じなので その型に許された演算が可能である。


例 7
        struct  point{
            float x;
            float y;
        };

        struct point  init( void ){
            struct point p;
            p.x = 0.0;
            p.y = 0.0;
            return p;
        }

例 7 は、関数でいくつのかの値を返すための一つの方法を示している。 関数 init は、引数なしで、返り値の型は 構造体 point であるので、 x 座標と y 座標の2つの値を返す事ができる。実際には、関数の 中では、 (x,y) 座標を原点に設定しているだけである。


例 8
        struct  point{
            float x;
            float y;
        };

        struct point  init( void ){
            struct point p;
            p.x = 0.0;
            p.y = 0.0;
            return p;
        }

        main(){
            struct point p1, p2;

            p1 = init();
            p2 = init();
        }

例 7 で作った構造体 point 型の関数 init を使ったのが例 8 である。 ここで重要なのは、関数 init は、構造体 point 型の関数なので、それを 直接、構造体 point の変数 p1, p2 へと代入することが出来る点 である。このように、関数の型と構造体の一括代入とを使えば、関数と複数の 値をやり取りすることが出来るのである。



Noriyo Kanayama