C言語は、シンプルながらも強力なプログラミング言語として、システム開発や組み込み分野をはじめ多くの現場で利用されています。その中でも「構造体」は、複数の異なる型のデータをひとつにまとめて管理できる便利な機能です。たとえば、個人情報や座標データなど、現実世界の複雑なデータ構造を効率的に表現したいときに欠かせません。初心者から中級者まで、C言語を学ぶうえで構造体の理解は避けて通れない重要なテーマです
C言語の構造体とは?
C言語の構造体(Structure)は、関連する複数のデータをひとつにまとめて扱えるユーザー定義型です。たとえば、氏名・年齢・住所など、異なる型の情報を1つのまとまりとして管理できるため、個人情報や座標情報などのデータ構造を効率的に表現できます。
構造体の基本構文と定義方法
struct 構造体名 {
型名 メンバ名1;
型名 メンバ名2;
// ...
};
- structキーワードで宣言し、複数のメンバ(member)を定義します。
- メンバはintやcharなど、異なる型を自由に組み合わせ可能です。
例:個人情報の構造体
struct Person {
char name[32];
int age;
char address[64];
};
構造体の変数宣言と初期化
- 構造体型の変数は、
struct 構造体名 変数名;
で宣言します。 - 初期化は配列と同じく、波括弧
{}
でメンバごとに値を指定します。
struct Person p1 = {"山田太郎", 20, "東京都"};
- 配列として複数人分をまとめることも可能です。
メンバへのアクセス方法
- ドット演算子(.):構造体変数からメンバにアクセス
- 例:
p1.age = 21;
- 例:
- アロー演算子(->):構造体ポインタからメンバにアクセス
- 例:
struct Person *pp = &p1; printf("%d", pp->age);
- 例:
typedefによる型名の省略
typedef
を使うことで、struct
の記述を省略し、より簡潔に記述できます。
typedef struct {
char name[32];
int age;
} Person;
Person p2 = {"佐藤花子", 25};
- タグ名を省略した無名構造体でも型名を付与できます。
構造体の配列・ポインタ・関数利用
- 構造体の配列:
Person people;
- 構造体ポインタ:
Person *p = &people;
- 関数引数として渡す場合、大きな構造体はポインタ渡しが推奨されます(コピーコスト削減のため)。
構造体と配列の違い
項目 | 構造体 | 配列 |
---|---|---|
型 | 異なる型をまとめられる | 同じ型のみ |
アクセス | メンバ名でアクセス | インデックスでアクセス |
拡張性 | メンバ追加・変更が容易 | 要素型を変えられない |
構造体の活用例
- ユーザー情報管理
- 座標やベクトルの表現
- 複数の設定値やパラメータのグループ化
- 組み込み開発でのハードウェアレジスタ管理など
まとめ:構造体のポイント
- 異なる型のデータを1つのまとまりとして管理できる
- メンバアクセスは
.
、ポインタ経由は->
を使う - typedefで型名を簡潔にできる
- 配列やポインタ、関数引数でも活用可能
構造体を使いこなすことで、C言語のプログラムは可読性・保守性・拡張性が大きく向上します。プログラム設計の際は積極的に活用しましょう。
コメント