この記事では、構造体という便利なデータ型について解説します。
構造体の定義やメンバーへのアクセス方法、ポインタや配列、ネストなど、構造体の基本的な使い方から応用例までを解説します。
構造体とは
構造体(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
という構造体を定義し、name
とage
というメンバーを持たせています。
main
関数内で、person1
という変数を宣言し、name
とage
にそれぞれの値を代入しています。
そして、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
という構造体を定義し、name
とage
というメンバーを持たせています。
main
関数内で、person1
という変数を宣言し、name
とage
にそれぞれの値を代入しています。
また、ptr
というポインタ変数を宣言し、person1
のアドレスを代入しています。
そして、アロー演算子を使ってポインタ経由でperson1
のメンバーにアクセスし、値を表示しています。
ドット演算子とアロー演算子は、構造体のメンバーへのアクセス方法の違いですが、どちらも同じ結果を得ることができます。
適切な方法を選択して、構造体のメンバーにアクセスしてください。