【独学C言語】構造体とは

※この記事は「2020年12月19日」に更新しました。

C言語には、複数のデータ型をまとめて扱う、構造体というものがあります。

前回は、ポインタと配列について、解説しました。

【独学C言語】ポインタと配列

【独学C言語】ポインタと配列

2020年5月2日

構造体と似たようなもので配列というのがありました。

これは同じデータ型同士でしかまとめて扱うことができません。

構造体なら異なるデータ型でもまとめて扱うことが可能です。

それでは見ていきましょう。

構造体とは

構造体とは関連するデータをまとめて扱うときに使います。

例えば、個人情報データの場合、番号、名前、年齢などの項目が考えられます。

それぞれのデータ型の配列に格納すると非常に管理しづらいことがわかるかと思います。

番号、名前、年齢が書いた 1枚のカードをイメージしてもらうとわかりやすいかと思います。

このように管理すれば、非常にわかりやすくなります。



構造体の宣言

構造体の宣言は以下の通りです。

struct 構造体名
{
    メンバ;
    …
}

struct というキーワードが構造体を宣言するときに使用されます。

例えば、以下のような構造体を宣言してみます。

struct person
{
    int no;
    char name[20];
    int age;
};

これで int型の no、char型の配列 name、int型の age をメンバに持つ struct person が宣言されたことになります。

しかし、あくまで新しいデータ型を作成しただけなので、変数の実体はまだありません。

変数の定義

先程作成した struct person 型の data という変数を定義してみます。

struct person data;

注意点は、struct というキーワードも含めてデータ型になるということです。

これで変数が定義されました。

typedef(タイプデフ)

構造体変数を定義するときにいつも struct というキーワードが必要になるので、少々面倒です。

そこで、typedef(タイプデフ)を使った宣言を紹介します。

typedef 既存の型名 型の別名;

例えば、先程の struct person 型を typedef を使って Person という型の別名を作成しましょう。

typedef struct person
{
    int no;
    char name[20];
    int age;
}Person;

これで struct person 型の data という変数を定義してみます。

Person data;

さっきよりも記述が楽になりました。

サンプルプログラム【C言語】

構造体を理解するためのサンプルプログラムです。

sample.c というソースファイルを作成します。

#include <stdio.h>

typedef struct Person
{
    int no;
    char name[20];
    int age;
}Person;

int main(void)
{
    int cnt;
    Person data[3];

    for(cnt = 0; cnt < 3; cnt++)
    {
        printf("\n");

        printf("Input No : ");
        scanf("%d", &data[cnt].no);

        printf("Input Name : ");
        scanf("%s", &data[cnt].name[0]);

        printf("Input Age : ");
        scanf("%d", &data[cnt].age);
    }

    printf("\n");

    for(cnt = 0; cnt < 3; cnt++)
    {
        printf("No.%d %s %d", data[cnt].no, &data[cnt].name[0], data[cnt].age);
        printf("\n");
    }

    printf("\n");

    return 0;
}

まず、typedef を使って構造体を宣言しています。

番号、名前、年齢を 3人分入力させるようにしています。

ただし、バリデーションを行っていないので、入力に注意してください(練習なんで)。

特に名前は、20文字以上入力しないようにしてください。

その後、3人分出力しています。

結果は以下の通りです。

構造体とは

独学C言語の記事について【おまけ】

タカフミブログの独学C言語シリーズは、C言語を独学するということを目的に記事を書いています。

他の記事に興味がある方は以下をご参照下さい。

C言語に関する記事一覧

C言語は、古典的なイメージがある方もいるかもしれませんが、他の多くのプログラミング言語のベースになっています。

実際に本格的なソフトを開発するとなるとなかなか大変ですが、とにかくハードウェアのリソースが少なくても高速に動くのが最大のメリットです。

プログラマーや SE(システムエンジニア)を目指す方は一度お試し下さい。

最後に【構造体について】

いかがでしょうか。

今回は、構造体について、紹介しました。

次回は、構造体とポインタについて、解説していきます。

【独学C言語】構造体とポインタ

【独学C言語】構造体とポインタ

2020年5月6日

オブジェクト指向のプログラミング言語を学習するとクラスという概念を学習します。

構造体は、このクラスという考え方に少し似ています。

C言語は、オブジェクト指向ではないので、あくまで新しいデータ型としてパッケージしているだけです。

Java や C++、C# を今後学習することがあれば、違いを比較してみると面白いかと思います。