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;

     

  • 与结构体一样,共用体也是存放不同数据类型的变量
  • 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
  • 结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
posted @ 2019-09-14 21:14  aakihi  阅读(2145)  评论(0编辑  收藏  举报