この記事について
C言語基礎 第13回では、C言語における構造体について紹介していきます。構造体(Structure)とは、関連性のある複数の異なるデータ型をひとまとめにして新しいデータ型を定義するための仕組みです。なぜこのような機能が必要なのか具体例を用いて確認しましょう。例えば、ある学級のテストの個人成績をまとめる際に以下のようなプログラムを作成したとします。
int japanese = 90;
int math = 80;
int english = 76;
特にエラーになるわけではありませんが、仮に複数人の成績をまとめる場合、少しややこしいことになります。
int yamada_japanese = 90;
int yamada_math = 80;
int yamada_english = 76;
int tanaka_japanese = 80;
int tanaka_math = 100;
int tanaka_english = 50;
これはかなり極端な例ですが、人数が増えれば増えるだけわかりづらくなることは容易に想像できると思います。そこで構造体を使用することで、関連するデータをまとめて扱いやすくし、より複雑なデータ構造を表現することができます。C言語の構造体は、ユーザーが独自に定義したデータ型として利用できます。
構造体の定義
それでは次に構造体の使い方について学習していきましょう。構造体は関数と同じようにあらかじめ定義する必要があります。最初に構造体の定義について、以下を確認しましょう。
//構造体の定義
struct 構造体名 {
データ型 メンバー名1;
データ型 メンバー名2;
};
メンバーとは構造体の中で使う変数のことを指します。構造体も関数と同じように「ここからここまでが構造体です。」と明記する必要がありますので'{}’を用いてブロックを作成します。それでは実際に構造体を作成していきましょう。
#include <stdio.h>
int main(void)
{
// Student構造体の定義
struct Student {
int math; // 数学の成績
int japanese; // 国語の成績
int english; // 英語の成績
};
return 0;
}
これで構造体が作成できました。また、構造体名の先頭は大文字にする習慣がありますので覚えておきましょう。続いて、作成した構造体を使っていきましょう。
構造体の使い方
それでは実際に作成した構造体を使用していきましょう。
#include <stdio.h>
// Student構造体の定義
struct Student {
int math; // 数学の成績
int japanese; // 国語の成績
int english; // 英語の成績
};
int main() {
// Student構造体の変数を宣言
struct Student student1;
// メンバーに値を代入
student1.math = 90;
student1.japanese = 85;
student1.english = 78;
// メンバーの値を表示
printf("Math: %d\n", student1.math);
printf("Japanese: %d\n", student1.japanese);
printf("English: %d\n", student1.english);
return 0;
}
構造体を使うときは「構造体変数」というものを作成します。上記のコードでは’student1’が構造体変数に該当します。構造体変数を宣言すると、”math”、”japanese”、”english”という3つの整数型の変数を持ったオリジナルのデータ型として使えるようになります。宣言だけでは中身が空の状態なので、それぞれのメンバーに対して適切な値を代入しています。構造体変数の値の操作は以下の通りです。
構造体変数.メンバー名=値;
また,
以下のように構造体変数にまとめて値を代入することもできます。
struct Student student1 = {90, 85, 78};
それぞれのメンバーに値が格納されることで”math”、”japanese”、”english”の3つの変数を持った一つの構造体として使えるようになりました。関連性のある一つのデータとして扱えますので、それぞれを独立した変数として使うより間違いが起こりづらいのは言うまでもありません。次により簡単に構造体を使う方法を紹介します。
構造体とtypedef
構造体を宣言する際にtypedefを使用することで、構造体の宣言を簡潔にすることができます。typedefは「type(型)def(定義)」というぐらいなので構造体に別名を付ける機能だと考えるとよいでしょう。以下は、typedefを使ってstruct StudentをStudentという型名に割り当てる例です。
#include <stdio.h>
// Student構造体の定義
typedef struct {
int math; // 数学の成績
int japanese; // 国語の成績
int english; // 英語の成績
} Student;
int main() {
//構造体変数の初期化
Student student1 = {90, 85, 78};
// メンバーの値を表示
printf("Math: %d\n", student1.math);
printf("Japanese: %d\n", student1.japanese);
printf("English: %d\n", student1.english);
return 0;
}
typedefを使うことで構造体変数を定義するときにstructの記述が不要になります。
まとめ
今回はC言語の構造体という機能を紹介しました。構造体が使えるようになると不要な記述が減るのでミスが起こりづらくなるだけでなく、第三者がソースコードを見る際にもわかりやすくなります。身の回りで関連性のあるデータを構造体に置き換え、沢山練習をしましょう。
コメント