1、自定義數據類型


 

1、結構體:存放一組不同類型的數據

  • 結構體的定義
    struct student
     {
         int num;
       float MathScore; float EnlishScore; }stu1;

    也可以用typedef來定義

     typedef struct  student
     {
         int num;
    float MathScore; float EnlishScore; }stu;
  • 也可以定義結構體數組和指針
    struct student
     {
         int num;
        float MathScore;
         float EnlishScore;
     }stu1,*stu2,stu3[10];
  • 結構體的使用
    • 普通的結構體變量
          stu1 = { 1,66,88 };
      
          printf("%d\n", stu1.num);
          printf("%f\n", stu1.MathScore);
          printf("%f\n", stu1.EnlishScore);
    • 結構體指針變量
      #include <stdio.h>
      
      struct student
      {
          int num;
          float MathScore;
          float EnlishScore;
      };
      int main()
      {
          student stu1;
          stu1 = { 12, 66.6,76.5 };
          student *pstu = &stu1;
          printf("學號是%d,今年的數學成績是%.1f,今年的英語成績是%lf!\n", (*pstu).num, (*pstu).MathScore, (*pstu).EnlishScore);
          printf("學號是%d,今年的數學成績是%.1f, 今年的英語成績是%lf!\n", pstu->num, pstu->MathScore, pstu->EnlishScore);
          return 0; 
      }
  • 結構體的初始化
    stu1 = { 12, 66.6,76.5 };

     

    stus[] = {
        {"Zhou ping", 5, 18, 'C', 145.0},
        {"Zhang ping", 4, 19, 'A', 130.5},
        {"Liu fang", 1, 18, 'A', 148.5},
        {"Cheng ling", 2, 17, 'F', 139.0},
        {"Wang ming", 3, 17, 'B', 144.5}
    };

     2、枚舉類型:C語言提供了一種枚舉(Enum)類型,能夠列出所有可能的取值

  • 枚舉類型的定義

    enum typeName{ valueName1, valueName2, valueName3, ...... };

    enum是一個新的關鍵字,專門用來定義枚舉類型,這也是它在C語言中的唯一用途;typeName是枚舉類型的名字;valueName1, valueName2, valueName3, ......是每個值對應的名字的列表。                

  • 枚舉類型的初始化
    enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };//依次對week成員賦值;
    enum week {a, b, c};//如何沒有直接賦值,則從第一個成員為0,后面的成員依次增加;
    enum week {a, b=5, c};//前面不變,b=5,后面依次增加;

     

  • 枚舉類型的使用
    #include <stdio.h>  
    #include <stdlib.h>  
    
    typedef enum weekday { mon, tue, wen, tur, fri, sat, sun }Weekday;
    
    Weekday test_enum()
    {
        Weekday Today = mon;
        return Today;
    }
    
    int main()
    {
        printf("%d\n", test_enum());  //輸出0;
        return 0;
    }

    3、共用體 

  • 定義共用體並創建變量
    union data{
        int n;
        char ch;
        double f;
    } a, b, c;

     

  • 與結構體一樣,共用體也是存放不同數據類型的變量
  • 結構體和共用體的區別在於:結構體的各個成員會占用不同的內存,互相之間沒有影響;而共用體的所有成員占用同一段內存,修改一個成員會影響其余所有成員。
  • 結構體占用的內存大於等於所有成員占用的內存的總和(成員之間可能會存在縫隙),共用體占用的內存等於最長的成員占用的內存。共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM