C入門8:構造体入門

3250 ワード

1.構造体とは何ですか.
配列は順序があり、タイプが同じデータのセットですが、いくつかのタイプの異なるデータを一緒に配置したい場合はどうすればいいのでしょうか.配列は同じタイプの複数の変数で結合されています.構造体は異なるタイプの複数の変数で結合されています.
例えば、学生の名前、年齢、成績はそれぞれ異なるデータ型から構成されています.すなわち、名前は文字列データで、年齢は整数型データで、成績は浮動小数点型(小数)型データです.このとき、構造体を使用して実現することができます.
2.構造体はどう使いますか.
2.1構造体の定義
  • 構文
  • struct     {
            ;
    };
    

    構造体のメンバー定義は変数と同じであり,すなわち構造体に複数の変数が定義されている.たとえば、学生の構造体を定義します.
    struct Student {
        char  name[32];   //  
        int  age;     //  
        float  score;   //  
    };
    

    2.2構造体変数の定義
    struct  Student student1;
    

    以上、名前、年齢、成績の3つのメンバーを持つStudent型の構造体変数student1を定義した.
    2.3構造体メンバー参照
    構造体全体の入力と出力はできません.構造体変数メンバー参照と呼ばれるメンバーを個別に操作する必要があります.フォーマットは次のとおりです.
          .   
    

    構造体変数名とメンバーの間には、英語の句点.があります.例:学生情報の入出力
    #include 
    
    struct Student {
        char  name[32];   //  
        int  age;     //  
        float  score;   //  
    };
    
    int main(){
        struct Student student1;
        scanf("%s%d%f",&student1.name,&student1.age,&student1.score);
        printf("  :%s
    :%d
    :%0.1f
    ",student1.name,student1.age,student1.score); }

    2.5構造体メンバーの割り当て
    構造体変数メンバー付与は、構造内のすべてのメンバーに順次付与されます.
    struct Student student1;
    struct Student student2;
    
    strcpy(student1.name,"  "); 
    student1.age = 19;
    student1.score = 90.5;
    
    strcpy(student2.name,"  ");
    student2.age = 18;
    student2.score = 95.5;
    
    printf("  \t  \t  
    "); printf("%s\t%d\t%.1f
    ",student1.name,student1.age,student1.score); printf("%s\t%d\t%.1f
    ",student2.name,student2.age,student2.score);

    注:数値タイプメンバーは直接値を割り当てることができます.文字列タイプ変数は文字列レプリケーション関数を使用する必要があります.
    2.6構造体賦課
    構造体変数の全体的な付与は、構造体のすべてのメンバーに付与されます.
    struct Student student1;
    struct Student student2;
    
    strcpy(student1.name,"  "); 
    student1.age = 19;
    student1.score = 90.5;
    
    student2 = student1;
    
    printf("  \t  \t  
    "); printf("%s\t%d\t%.1f
    ",student1.name,student1.age,student1.score); printf("%s\t%d\t%.1f
    ",student2.name,student2.age,student2.score);

    構造体は全体的に値を付与することができ、配列は直接値を付与することはできません.
    2.7構造体全体の初期化
    構造体変数が直接初期化されると、操作がより簡単になります.
    struct Student student1 = {"  ",19,90.5};
    struct Student student2 = {"  ",18,95.5};
    
    printf("  \t  \t  
    "); printf("%s\t%d\t%.1f
    ",student1.name,student1.age,student1.score); printf("%s\t%d\t%.1f
    ",student2.name,student2.age,student2.score);

    注:付与データの順序は、構造体メンバーの宣言順序と一致する必要があります.
    2.8構造体部分初期化
    構造体は、全体の初期化に加えて、以下のように初期化してもよい.
    struct Point3D{
        int x;
        int y;
        int z;  
    };
    struct Point3D p = {.x=10,.z=20}; 
    
  • 問題の構造体の部分は初期化して、初期化していないメンバーの値はいくらですか?

  • 3.その他の構文
    3.1構造体を定義し、同時に構造体変数を定義する
    struct Student{
        char  name[32]; //  
        int  age; //  
        float  score; //  
    } student1,student2;
    

    3.2構造体を定義し、同時に構造体変数を定義し、初期値を付与する
    struct Student{
        char  name[32]; //  
        int  age; //  
        float  score; //  
    } student1 = {“Zhang”, 19, 90.5};