構造体と共用体
Quiz void effect(int); int main(void) { int x=1, *p; p = &x; effect(*p); printf(“%d\n”,x); } void effect(int z) z = 4; void effecp(int *); int main(void) { int x=1, *p; p=&x; effectp(p); printf(“%d\n”,x); } void effectp(int *z) *z = 4;
前回の復習 ポインタ変数の定義 アドレス演算子・間接参照演算子 (代入演算の左辺と右辺では機能が違う!) ポインタ変数を用いた関数定義 なぜアドレス変数と呼ばない? アドレス演算子・間接参照演算子 (代入演算の左辺と右辺では機能が違う!) ポインタ変数を用いた関数定義
構造体・共用体の定義
構造体の例(1) C言語には複素数型がない!→ ならば定義しよう! メンバ変数 .はメンバ参照演算子
構造体の例(2) ちょっと新しい型を定義したという気分に欠ける typedefを使う
構造体のポインタ変数 構造体を値として渡すとメンバ変数の全ての値がコピーして渡されプログラムの実行効率が悪い 構造体のアドレス(ポインタ)を使う
間接メンバ参照演算子 -> (*a).x = a->x (*変数名)はプログラムを見難くする(?)
演算子の優先順位に注意!
共用体(1) 同じような概念のデータで、選択的に一つのデータが使われる場合か、同じデータ の別表現を格納するのに使う w b c h r a type = 1 (円) type = 2 (長方形) type = 3 (三角形)
共用体(2) c c r t r t
練習1: アドレス帳の1ページを表す構造体を定義してみよう。 練習2: アドレス帳の配列を集めてアドレス帳構造体を定義しよう。 練習1: アドレス帳の1ページを表す構造体を定義してみよう。 練習2: アドレス帳の配列を集めてアドレス帳構造体を定義しよう。 1.名前 2.生年月日 3.性別 4.住所 5.コメント .