【C言語】構造体の扱い方についてわかりやすく詳しく解説

この記事では、構造体という便利なデータ型について解説します。

構造体の定義やメンバーへのアクセス方法、ポインタや配列、ネストなど、構造体の基本的な使い方から応用例までを解説します。

目次から探す

構造体とは

構造体(Struct)は、関連する複数のデータをひとまとめにして扱うためのデータ型です。

異なるデータ型のメンバーを持つことができ、それぞれのメンバーには名前が付けられます。

構造体を使用することで、関連するデータをまとめて扱うことができます。

構造体の宣言と初期化

構造体の宣言

構造体は、複数の異なるデータ型をまとめて1つのデータ型として扱うためのものです。

構造体を宣言するには、以下のような構文を使用します。


struct 構造体名 {
    データ型 メンバー名1;
    データ型 メンバー名2;
    // 他のメンバー
};

構造体名は、新しいデータ型の名前となります。

メンバー名は、構造体内の各データの名前です。

データ型は、メンバーが持つデータの型を指定します。

以下は、構造体の宣言の例です。


struct Person {
    char name[20];
    int age;
    float height;
};

この例では、Personという構造体を宣言しています。

この構造体は、名前(name)、年齢(age)、身長(height)の3つのメンバーを持ちます。

構造体の初期化

構造体を宣言した後、初期化することができます。

構造体の初期化は、メンバーごとに値を指定する方法と、一括で値を指定する方法の2つがあります。

メンバーごとに値を指定する方法

メンバーごとに値を指定するには、以下のような構文を使用します。


struct 構造体名 変数名 = {値1, 値2, ...};

以下は、構造体のメンバーごとに値を指定して初期化する例です。


struct Person p = {"John", 25, 175.5};

この例では、Person構造体の変数pを宣言し、名前にJohn、年齢に25、身長に175.5を指定して初期化しています。

一括で値を指定する方法

一括で値を指定するには、以下のような構文を使用します。


struct 構造体名 変数名 = {.メンバー名1 = 値1, .メンバー名2 = 値2, ...};

以下は、構造体のメンバーを一括で値を指定して初期化する例です。


struct Person p = {.name = "John", .age = 25, .height = 175.5};

この例でも、同じくPerson構造体の変数pを宣言し、名前にJohn、年齢に25、身長に175.5を指定して初期化しています。

構造体の初期化は、宣言と同時に行うことも、後から行うこともできます。

初期化しない場合、構造体のメンバーはデフォルトの値で初期化されます。

以上が、構造体の宣言と初期化についての説明です。

構造体のメンバーへのアクセス

構造体を使用すると、関連するデータをひとまとめにして扱うことができます。

構造体のメンバーへのアクセス方法には、ドット演算子とアロー演算子の2つがあります。

それぞれの使い方について説明します。

ドット演算子を使ったアクセス

ドット演算子(.)を使用すると、構造体のメンバーに直接アクセスすることができます。

以下に例を示します。


#include <stdio.h>
// 構造体の定義
struct Person {
    char name[20];
    int age;
};
int main() {
    // 構造体の宣言と初期化
    struct Person person1 = {"John", 25};
    // ドット演算子を使ってメンバーにアクセス
    printf("名前: %s\n", person1.name);
    printf("年齢: %d\n", person1.age);
    return 0;
}

上記の例では、Personという構造体を定義し、nameageというメンバーを持たせています。

main関数内で、person1という変数を宣言し、nameageにそれぞれの値を代入しています。

そして、printf関数を使ってperson1のメンバーにアクセスし、値を表示しています。

アロー演算子を使ったアクセス

アロー演算子(->)を使用すると、ポインタ経由で構造体のメンバーにアクセスすることができます。

以下に例を示します。


#include <stdio.h>
// 構造体の定義
struct Person {
    char name[20];
    int age;
};
int main() {
    // 構造体の宣言と初期化
    struct Person person1 = {"John", 25};
    
    // 構造体へのポインタを宣言
    struct Person *ptr = &person1;
    // アロー演算子を使ってメンバーにアクセス
    printf("名前: %s\n", ptr->name);
    printf("年齢: %d\n", ptr->age);
    return 0;
}

上記の例では、Personという構造体を定義し、nameageというメンバーを持たせています。

main関数内で、person1という変数を宣言し、nameageにそれぞれの値を代入しています。

また、ptrというポインタ変数を宣言し、person1のアドレスを代入しています。

そして、アロー演算子を使ってポインタ経由でperson1のメンバーにアクセスし、値を表示しています。

ドット演算子とアロー演算子は、構造体のメンバーへのアクセス方法の違いですが、どちらも同じ結果を得ることができます。

ポインタを使用する場合はアロー演算子を使い、ポインタを使用しない場合はドット演算子を使うのがC言語の仕様です。

適切な方法を選択して、構造体のメンバーにアクセスしてください。

1 2 3 4 5 6 7
目次から探す