Previous: 構造体の宣言
Up: 構造体 I
Next: 初期化
Previous Page: 構造体の宣言
Next Page: 初期化
構造体に許された演算は、メンバーへのアクセスと、代入のみである。 構造体変数から同じ型の構造体変数への一括代入があるのは非常に便利である。 一方、構造体のメンバーに関しては、そのメンバーの型に許された演算はすべて 許される。
例5 struct point{ float x; float y; } p1, p2;p1.x = 1.0; p1.y = 2.0; p2 = p1;
構造体変数のメンバーにアクセスするには、変数名の後ろにドットを置き、その後ろに メンバー名を書く。p1.x は、構造体変数 p1 のメンバー x と いう意味である。従って、例4は、構造体変数 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 を使ったのが例7である。 ここで重要なのは、関数 init は、構造体 point 型の関数なので、それを 直接、構造体 point の変数 p1, p2 へと代入することが出来る点 である。このように、関数の型と構造体の一括代入とを使えば、関数と複数の 値をやり取りすることが出来るのである。