C   構造体

ホーム   C/C++チュートリアル


この「C入門」は、GTKのコードを読むための必要最小限な説明をしています。
他の言語などの予備知識は必要としていません。

構造体

構造体は、違う型の値を一つにまとめることのできるデータ型です。

struct.c


#include <stdio.h>

struct Person
{
    char    *gender;
    int     age;
    float   bmi;
};

typedef struct
{
    char    *type;
    float   weight;
} animal;

typedef struct
{
    char    *family;
    float   height;
} plant;

int main()
{
    puts("----------------------------------------");
    struct Person hanako;
    
    hanako.gender   = "female";
    hanako.age      = 28;
    hanako.bmi      = 22.5;
    printf("Hanako\t %s\t bmi\t:%4.1f\t age:%d\n",  hanako.gender,
                                                    hanako.bmi,
                                                    hanako.age);
    
    animal pochi;
    
    pochi.type      = "dogs";
    pochi.weight    = 8.1;
    printf("Pochi\t %s\t weight\t:%4.1f\n",         pochi.type,
                                                    pochi.weight);
    
    plant referrer;
    plant *cherry   = &referrer;
    
    cherry->family  = "roses";
    cherry->height  = 4.5;
    printf("Cherry\t %s\t tall\t:%4.1f\n",          cherry->family,
                                                    cherry->height);
    
    puts("----------------------------------------");
    
    return 0;
}
    

実行結果


----------------------------------------
Hanako	 female	 bmi	:22.5	 age:28
Pochi	 dogs	 weight	: 8.1
Cherry	 roses	 tall	: 4.5
----------------------------------------
    

コード説明

  1. struct Person
    構造体は struct というキーワードで作ります。続く Person は、 どの構造体かを識別するためにつけるタグ名と呼ばれるものです。 タグ名は自由な名前にすることが できます。
  2. {
    構造体の内容は { と }; で囲むことになっています。最後の }; には ; セミコロンが つくことに注意してください。
  3. char *gender;
    構造体に含めるデータを定義しています。構造体に含まれるデータのことをメンバ (Member)と呼びます。
  4. };
    構造体の定義の最後は }; で終わります。; セミコロンがつくことに注意してください。
  5. puts("----------------------------------------");
    puts( )は、引数の文字列をターミナルに出力して、自動的に改行します。 引数に指定できるのは文字列だけです。
  6. struct Person hanako;
    構造体の変数を作るには、struct タグ名 変数名とします。
  7. hanako.gender = "female";
    構造体の個々のメンバにアクセスするには、変数名 . メンバ名とします。 この . のことをドット演算子と言います。
  8. 
    typedef struct
    {
        ・・・
    } animal;
        
    typedef キーワードは、
    typedef   既存の型   新しい名前;
    とすることによって複雑な型を、簡単な名前で定義し直すことができます。 最後に ; セミコロンをつけることに注意してください。
  9. animal pochi;
    typedef を使うことによって animal という型名だけで構造体の変数を作れるようになります。
  10. 
       plant referrer;
        plant *cherry   = &referrer;
        
    構造体のポインターを作るには、まず構造体の変数を作り、その変数のアドレスを 構造体のポインターに入れます。
  11. cherry->family = "roses";
    構造体のポインターのメンバにアクセスするには、ポインター名 -> メンバ名とします。 この -> のことをアロー演算子と言います。



708 visits
Posted: Dec. 25, 2019
Update: Dec. 25, 2019

ホーム   C/C++チュートリアル   目次