構造体: データのパッケージ化

バラバラの変数をひとまとめにする「冒険者のリュックサック」。

構造体 (Structure)
異なる型の変数をまとめて、新しい型を作る機能。
メンバ (Member)
構造体の中に入っている変数のこと。
アロー演算子 (->)
ポインタからメンバにアクセスするための記号。(*p).x の糖衣構文。
冒険者のリュック (Adventurer's Backpack)

構造体は「冒険者のリュック」です。 剣(int)、薬(float)、地図(char配列)など、種類(型)が違うアイテムをひとまとめにして持ち運べます。 リュック自体を変数として扱えるので、関数に渡すときも「剣と薬と地図を渡す」ではなく「リュックを1つ渡す」だけで済みます。

関連データをひとまとめに

RPGのキャラクターデータを作るとします。「HP(int)」「名前(char配列)」「攻撃力(int)」といった異なる型のデータが必要です。これを別々の変数で管理するのは大変です。

構造体 (struct) は、これらを一つの「型」としてパッケージ化する機能です。オブジェクト指向言語における「クラス」の祖先にあたります(ただしメソッドは持ちません)。

Struct Definition
// 構造体の定義
struct User {
int id;
char name[50];
int age;
};
int main(void) {
// 宣言
struct User u1;
// 代入
u1.id = 1;
strcpy(u1.name, "Alice"); // 文字列コピー
u1.age = 20;
// 表示(.を使う)
printf("User: %s (%d)\n", u1.name, u1.age);
return 0;
}