Download presentation
Presentation is loading. Please wait.
1
プログラミング 3 構造体(1)
2
配列と構造体 配列:一連の変数を数で呼び分ける 構造体:一連の変数を名前で呼び分ける
3
構造体 ひとつの変数(構造体)が,1 つ以上の名前の付いた 変数から構成されている 構造体を構成するそれぞれの変数をメンバという
住所カードのようなものを思い浮かべるとよい 連絡先カード 氏名 …… 住所 電話番号 メールアドレス
4
構造体の作り方(1) 構造体は,使う前に,「どんな名前の変数から構成さ れるか」と「型名」を定義する
例:実部 re と虚部 im をそれぞれ double 型で持つ 構造体(複素数を表すつもり)cplx struct cplx { double re; double im; }; これにより,メンバ re と im を持つ「struct cplx」型が作 られる 構造体の定義はプログラムの関数より前で行うことが多い
5
構造体の作り方(2) 型が作られた構造体は通常の変数と同じように宣言・ 定義できる struct cplx x; これで「struct cplx」型の x が作られる 構造体内のメンバは,「構造体名.メンバ名」でアク セスする x.re = 1.0; x.im = -2.0; . 演算子は助詞の「の」だと思おう 一度にひとつのメンバしか代入できない(一括代入はできな い) 初期化するときは,一括で値をセットすることができる struct cplx y = { -2.0, 3.0 };
6
構造体の使い方(1) struct cplx 型で表される複素数 x,y,z について, x と y の和を z に代入 z.re = x.re + y.re; z.im = x.im + y.im; 「z = x + y;」のように一度に計算はできない(「複素数で ある」という「意味」は作った人間が勝手に思い込んでいる だけ) 「構造体そのもの」についての演算は限られる =:代入(すべてのメンバを同時に代入できる) &:アドレスを得る .:メンバをたどる 四則演算や比較はできない(特に ==,!=)ので注意
7
構造体の使い方(2) scanf() 関数で読み込むとき scanf(“%lf%lf”, &x.re, &x.im);
printf() 関数で出力させるとき printf(“%f + %fi”, x.re, x.im); 構造体いっぺんに出力させる方法はない(メンバごとに出力 させる)
8
構造体と関数(1) 構造体を受け取る,構造体を返す関数が作れる
複素数の実部を返す関数 double real(struct cplx x) { return x.re; } 複素数の虚部を返す関数 double imaginary(struct cplx x) { return x.im; }
9
構造体と関数(2) 2 つの複素数の和を返す関数 struct cplx add(struct cplx x, struct cplx y) { struct cplx z; z.re = x.re + y.re; z.im = x.im + y.im; return z; }
10
構造体の配列 構造体の配列も作れる struct cplx x[10]; 要素番号を指定して,メンバを指定する
「x[0].re = 1.0;」など
11
typedef 宣言(1) 型の名前に別名を与える宣言 書き方 構造体は型名が長くなるので,短くするのに重用される
まず変数宣言を書く int seisuu; その前に typedef を付ける typedef int seisuu; すると,変数宣言の型名(int)に別名(seisuu)が与えられ る →seisuu 型が int 型の別名になる その後, seisuu a; のように変数が宣言できる
12
typedef 宣言(2) ポインタの例 typedef int *pInt;
pInt 型が int * 型の別名になる 構造体の例 typedef struct cplx Cplx; Cplx 型が struct cplx 型の別名になる→型名が短くなった! 構造体の場合,定義の後すぐに別名を宣言することが多い
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.