構造体

配列は同一の型で値をまとめて管理しましたが、構造体は様々な型のデータをひとまとめにして管理することができます。


構造体の構文

構造体を使用するには、まずその定義を行い、それを一つの型として宣言します。


構造体の定義

struct 構造体名 {
  データ型 メンバー名;
          ・
          ・
          ・
} 変数名;

※構造体名と変数名はどちらか一方のみ省略可能です。


構造体の宣言

struct 構造体名 変数名;

宣言と同時に値を代入(初期化)するとき。

struct 構造体名 変数名 = {データ1, データ2, ・・・};

▲PageTop

構造体の配列

構造体もデータ型ですから次のように配列にする事もできます。

構造体配列の宣言

struct 構造体名 変数名[要素の数];

宣言と同時に値を代入(初期化)するとき。

struct 構造体名 変数名[要素の数n] = {{データ1, データ2, ・・・}, {データ3, データ4, ・・・}, ...n};

▲PageTop

構造体へのアクセス

構造体のメンバーにアクセスするには次のようになります。


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

「.」(ドット演算子)を使用します。

構造体変数名.メンバー変数名;

配列のときは次のようになります。

構造体変数名[添え字].メンバー変数名;

構造体のポインタからメンバーへのアクセス

「->」(アロー演算子)を使用します。

構造体へのポインタ名 -> メンバー変数名;

▲PageTop

構造体の使用

サンプルソースを使って実際に使用方法を確認します。


・サンプルソース(sample0801.c)

#include <stdio.h>

struct Book {
    char name[30];  /* 名前 */
    int  price;  /* 価格 */
};

int main() {
    struct Book book = {"プログラミング言語C", 2800};  /* 構造体Book型変数の宣言 */
    struct Book ary_book[2] = {{"プログラミング言語C", 2800}, {"C言語入門", 2000}};  /* 構造体Book型配列の宣言 */
    struct Book *ptr_book;  /* 構造体Book型ポインタの宣言 */
    printf("--- 1. 構造体Book型変数の使用 -------------------------------\n");
    printf("■表示\n");
    printf("名前:%s\t価格:%d円\n", book.name, book.price);
    printf("■変更\n");
    book.price = 2940;
    printf("名前:%s\t価格:%d円\n", book.name, book.price);
    printf("-------------------------------------------------------------\n");
    printf("--- 2. 構造体Book型配列の使用 -------------------------------\n");
    printf("■表示\n");
    printf("名前:%s\t価格:%d円\n", ary_book[0].name, ary_book[0].price);
    printf("名前:%s\t\t価格:%d円\n", ary_book[1].name, ary_book[1].price);
    printf("■変更\n");
    ary_book[0].price = 2940;
    ary_book[1].price = 2100;
    printf("名前:%s\t価格:%d円\n", ary_book[0].name, ary_book[0].price);
    printf("名前:%s\t\t価格:%d円\n", ary_book[1].name, ary_book[1].price);
    printf("-------------------------------------------------------------\n");
    printf("--- 3. 構造体Book型ポインタの使用 ---------------------------\n");
    ptr_book = &book;
    printf("■表示\n");
    printf("名前:%s\t価格:%d円\n", ptr_book->name, ptr_book->price);
    printf("■変更\n");
    ptr_book->price = 3000;
    printf("名前:%s\t価格:%d円\n", ptr_book->name, ptr_book->price);
    printf("-------------------------------------------------------------\n");

    return 0;
}

・実行結果

C:\dev\c>sample0801 [Enter]
--- 1. 構造体Book型変数の使用 -------------------------------
■表示
名前:プログラミング言語C       価格:2800円
■変更
名前:プログラミング言語C       価格:2940円
-------------------------------------------------------------
--- 2. 構造体Book型配列の使用 -------------------------------
■表示
名前:プログラミング言語C       価格:2800円
名前:C言語入門         価格:2000円
■変更
名前:プログラミング言語C       価格:2940円
名前:C言語入門         価格:2100円
-------------------------------------------------------------
--- 3. 構造体Book型ポインタの使用 ---------------------------
■表示
名前:プログラミング言語C       価格:2940円
■変更
名前:プログラミング言語C       価格:3000円
-------------------------------------------------------------
        

▲PageTop