構造体

(ブログ記事の一覧は「こちら」)

「複数のデータ(変数)をまとめて、1つのかたまりにしたもの」を構造体と言います。 例えば「名前, 性別, 年齢」のデータをまとめたもののことを言います。

Javaを学んだ方であれば、さほど難しく考える必要はなく、クラスの(関数を含まない)変数だけにしたものが構造体、であると言えます)

構造体を構成する要素を、構造体のメンバと呼びます。 上の例では、「名前」「性別」「年齢」がメンバにあたります。

構造体の書き方の例(その1)

定義

struct Person1 {
    char name[32];
    int gender;
    int age;
};

呼び出し方

 struct Person1 person1;

構造体の書き方の例(その2)

定義

typedef struct Person2 {
    char name[32];
    int gender;
    int age;
} person_s;

呼び出し方

 person_s person2;

呼び出し方(ポインタを用いた場合)

 person_s *pPerson2;

    pPerson2 = (person_s *)malloc(1 * sizeof(person_s));

    free(pPerson2);

サンプルプログラム

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

struct Person1 {
    char name[32];
    int gender;
    int age;
};

typedef struct Person2 {
    char name[32];
    int gender;
    int age;
} person_s;

int main(void)
{
    struct Person1 person1;
    person_s person2;
    person_s *pPerson2;

    strcpy(person1.name, "Tom");
    person1.gender = 0;
    person1.age = 24;

    strcpy(person2.name, "John");
    person2.gender = 0;
    person2.age = 28;

    pPerson2 = (person_s *)malloc(1 * sizeof(person_s));
    strcpy(pPerson2->name, "Yoko");
    pPerson2->gender = 1;
    pPerson2->age = 19;

    printf("%s %d %d\n", person1.name, person1.gender, person1.age);
    printf("%s %d %d\n", person2.name, person2.gender, person2.age);
    printf("%s %d %d\n", pPerson2->name, pPerson2->gender, pPerson2->age);

    free(pPerson2);
    return 0;
}