さて、SACT2には関数の他に、それを補助する構造体(と、クラス)というものがあります。
これはいくつかの変数と関数を、一つの箱の中に入れたようなものです。
この箱の設計図的なものを構造体型といいます。
構造体型は、関数と同じように、関数の中で生成することはできません。
SACT2にはあらかじめ、いくつかの関数体型が定義されています。
構造体型に入れられた変数や関数は、構造体変数を宣言することで使えるようになります。
構造体変数は関数外(グローバル)で宣言されたものと、関数内(ローカル)で宣言するものの
2種類に分けられます。
グローバルで宣言されたものは、どの関数内でも使えるものです。
ローカルで宣言されたものはその関数から出ることで消滅します。
このあたりは他の変数と変わりません。
構造体の中の変数をメンバー変数、構造体の中の関数をメソッドと呼びます。
メンバー変数編
SACT2にもともとある構造体型の、構造体変数をgame_mainで呼び出してみましょう。
void game_main(void) { rect_t てすと; てすと.x = 3; てすと.y = 3; rect_t テスト; テスト.x = 4; テスト.y = 4; N(てすと.x + てすと.y + テスト.x + テスト.y);A; //3+3+4+4 = 14が表示されます }
まず3行目の「rect_t てすと;」ですが、これは「rect_t」という構造体型の
構造体変数を「てすと」という名前で宣言しています。
(rect_tはSACT2で定義されている構造体型の一つです)
構造体変数の宣言の方法(まぁ構造体型をint型などと同じと見れば、変数と同じです)
構造体型の名前(半角以上のスペース)構造体変数の名前;
これは関数内に記述しているので、ローカルな構造体変数です。
rect_tには int x、int yというint型変数が入っています。(初期値はありません)
他の変数も入っていますが、今はとりあえず使用せず放置することにします。
4行目の「てすと.x = 3;」は、
「rect_t」という構造体型で宣言された、
「てすと」という構造体変数の中の
「x」int型メンバー変数に、3を代入しています。
構造体変数の中に入った変数を扱う場合、構造体変数名.という書き方をします。
5行目も同じようにyに3を代入しています。
6行目は、新しい構造体変数を宣言しています。
同じ構造体型ですが、名前を変えています。これは「テスト」。
これにより、game_mainには2つの構造体変数が宣言されました。「てすと」と「テスト」。
7,8行目では、新しく宣言された構造体変数のx,yにそれぞれ4を代入しています。
最後の9行目で、全部の数字を足し、表示しています。
まとめ。
構造体変数宣言と同時に、構造体型の中で定義された
いくつかの変数を扱うことができるようになります。
変数の扱い方は、ようは 構造体変数名.がついたと考えてください。