構造体

構造体とは

構造体とは、沢山の変数をまとめて使えるようにしたものです。
沢山の変数を一度に宣言する配列がありましたが、それの親戚のようなものです。
配列が、全て同じ大きさの変数なのに対し、構造体は、大きさがそれぞれ違い、それぞれに名前を付けられます。

配列
1バイト1バイト1バイト1バイト1バイト1バイト

構造体
1バイト4バイト2バイト4バイト1バイト2バイト

構造体の定義は以下のようにします。
Type 構造体名
メンバ変数 As 型
メンバ変数 As 型
メンバ変数 As 型
End Type

実際のプログラムです。
#console
#include<vcrt71.sbp>

'DQ構造体を作る。
Type DQ
    LV As Long
    HP As Long
    MP As Long
    NAM[32] As Byte
End Type

'構造体を宣言する
Dim tolo As DQ

'構造体のメンバ変数にデータを入れる
tolo.LV=3
tolo.HP=333
tolo.MP=0
strcpy(tolo.NAM , "勇者とろ")

'構造体データを呼び出す
printf(Ex"LV : %d\nHP : %d\nMP : %d\n名前 : %s\n" ,_
    tolo.LV , tolo.HP , tolo.MP , tolo.NAM)
'ここで一言。長い文は_(アンダーバー)で2行に分けて書く事ができます。
とりあえず、これで構造体を作って、呼び出して、データを出し入れできるようになったと思います。
構造体のメンバ変数を.(ドット)でつなぐだけで、普通の変数と同じように扱うことができます。
tolo.LVはtoloのLVというように、"."を"の"で置き換えると分かりやすいと思います。

関数に渡す

構造体を関数に渡す時はアドレス(ポインタ)を使って渡します。
関数の引数をByRefにすればすみます。
上のDQ構造体を関数に渡してみましょう。ほとんど一緒です。
#console
#include<vcrt71.sbp>

Type DQ
    LV As Long
    HP As Long
    MP As Long
    NAM[32] As Byte
End Type

'構造体を宣言する
Dim tolo As DQ

'構造体のメンバ変数にデータを入れる
tolo.LV=3
tolo.HP=333
tolo.MP=0
strcpy(tolo.NAM , "勇者とろ")

PrintST(tolo)'関数に渡す

'構造体データをプリントする関数
Sub PrintST(ByRef dqs As DQ)
printf(Ex"LV : %d\nHP : %d\nMP : %d\n名前 : %s\n" ,_
    dqs.LV , dqs.HP , dqs.MP , dqs.NAM)
End Sub
関数はByRefにしないとコンパイラに怒られます。それだけです。
結果ははじめのプログラムと同じになるはずです。

構造体ポインタを使うこともできます。
詳しくはやりません。こんな書き方もあるんだと知っていれば問題ないです。
むしろ知らなくても当面は困ることは無いと重います。
#console
#include<vcrt71.sbp>

Type DQ
    LV As Long
    HP As Long
    MP As Long
    NAM[32] As Byte
End Type

'構造体を宣言する
Dim tolo As DQ

'構造体のメンバ変数にデータを入れる
tolo.LV=3
tolo.HP=333
tolo.MP=0
strcpy(tolo.NAM , "勇者とろ")

PrintST(VarPtr(tolo))'関数にポインタ渡す

'構造体ポインタをプリントする関数
Sub PrintST(dqs As *DQ)
printf(Ex"LV : %d\nHP : %d\nMP : %d\n名前 : %s\n" ,_
    dqs->LV , dqs->HP , dqs->MP , dqs->NAM)
End Sub
PrintST関数がdqs As *DQになっている点に注意してください。
構造体ポインタの変数にアクセスするときは、->を使います。

今回の内容で、覚えてほしいのは、構造体の作り方よりも使い方です。
構造体のメンバにアクセスするにはは.を使うこと、万が一ポインタだったら->を使います。
Windowsプログラムでは沢山の構造体が出てきます。どうしても構造体を使わなければなりません。
なので、構造体のメンバアクセスだけは、理解してください。