【6日でできるC言語入門】構造体の概念と使い方

 C言語で「構造体(struct)」を使うことで、複数種類のデータをひとまとまりにして扱うことができるようになります。たとえば「人」を表すなら、「名前」「年齢」「身長」といった個別のデータを一つの単位としてまとめられます。
 ここでは、構造体の基本概念から使い方、配列やポインタとの組み合わせまで、図やサンプルコードを使って詳しく解説します。

1.構造体の基本概念と宣言

1.1. 構造体とは

C言語の構造体は、異なる型のデータを一つのまとまり(新しい型)として扱うための仕組みです。

用語説明
構造体複数のメンバ(異なる型の変数)をまとめたデータ型
メンバ構造体を構成する個々の変数

構造体の定義とイメージ

struct person {
    int id;            // 識別番号
    char name[100];    // 名前
    double height;     // 身長
};

上記のように「struct+構造体名+{メンバ定義}」で宣言します。

1.2. 構造体変数の宣言と基本操作

構造体型が定義できたら、変数のように使うことができます。

struct person p;   // 構造体変数pの宣言

個々のメンバには「.」を使ってアクセスします。

アクセス例意味
p.id識別番号
p.name名前
p.height身長

2.構造体の利用例

2.1. 構造体の基本的な使い方

プロジェクト/ファイル名: Lesson64_1/main.c

#include <stdio.h>
#include <string.h>

struct person {
    int id;
    char name[100];
    double height;
};

int main(void) {
    struct person data;              // 構造体変数の宣言
    data.id = 101;
    strcpy(data.name, "田中一郎");
    data.height = 170.5;

    printf("ID:%d 名前:%s 身長:%.1fcm\n", data.id, data.name, data.height);
    return 0;
}

実行結果

「SDLチェック」を「いいえ」にして、プログラムを実行します。

ID:101 名前:田中一郎 身長:170.5cm

解説

  • 構造体変数のメンバへ「.」でアクセス
  • 文字列はstrcpy()で代入

2.2. 構造体の配列

複数の同じ種類のデータをまとめたい場合、「構造体の配列」を使います。

サンプル:配列による複数データの管理

プロジェクト/ファイル名: Lesson64_2/main.c

#include <stdio.h>
#include <string.h>

struct person {
    int id;
    char name[100];
    double height;
};

int main(void) {
    struct person list[] = {
        { 201, "佐藤花子", 160.3 },
        { 202, "鈴木次郎", 175.2 },
        { 203, "加藤美咲", 158.7 }
    };
    int i;
    for (i = 0; i < 3; i++) {
        printf("ID:%d 名前:%s 身長:%.1fcm\n", list[i].id, list[i].name, list[i].height);
    }
    return 0;
}

実行結果

ID:201 名前:佐藤花子 身長:160.3cm
ID:202 名前:鈴木次郎 身長:175.2cm
ID:203 名前:加藤美咲 身長:158.7cm

解説

  • 構造体の初期化には「{…}」を使う
  • 配列にすることで複数人分をまとめて管理できる

3.構造体とtypedef・ポインタ

3.1. typedefによる型名の短縮

「typedef」を使うと「struct」を省略して構造体変数を扱えます。

typedef struct person PERSON;

PERSON p1;

3.2. 構造体ポインタの利用

構造体ポインタは「->」でメンバにアクセスします。

サンプル:構造体ポインタの使い方

プロジェクト/ファイル名: Lesson64_3/main.c

#include <stdio.h>
#include <string.h>

typedef struct {
    int id;
    char name[100];
    double height;
} PERSON;

void print_person(PERSON* p) {
    printf("ID:%d 名前:%s 身長:%.1fcm\n", p->id, p->name, p->height);
}

int main(void) {
    PERSON s = { 301, "山本太郎", 180.4 };
    print_person(&s);
    return 0;
}

実行結果

ID:301 名前:山本太郎 身長:180.4cm

まとめ

  • 構造体は複数の関連データをまとめて扱うためのデータ型
  • 配列・ポインタ・typedefと組み合わせて柔軟なデータ管理ができる。
  • 「.」「->」によるメンバアクセスを使い分ける。

構造体の使い方を理解することで、C言語プログラムの設計力が大きく向上します。