1.结构体
        把不同类型的数据组合成一个整体
         所占内存长度是各成员所占内存的总和
        typedef struct XXX
         {
            int a;
            char b;
         }txxx;
         txxx data;
         typedef struct XXX
         {
            int a:1;
            int b:1;
            int c:30;
         }txxx;
使用typedef 定义结构体时,给XXX结构体起别名txxx,后续定义可以不用struct XXX,直接用txxx
2.结构体指针
        typedef struct XXX
         {
            int a;
         }txxx;
         txxx *data;
        (*data).a;
         data->a;
3.联合体
        使几个不同类型的变量共占一段内存
         整个联合体所占内存长度为最长成员占的内存长度
        typedef union XXX
         {
            int a;
            char b;
         }txxx;
         txxx data;
4.联合体应用实例 - 判断大小端问题
        union myunion
         {
            int a;
            char b;
         }
         int little_endian(void)
         {
            union myunion data;
            data.a = 0x12345678;
            if(data.b == 0x78)
               //小端
            else if(data.b == 0x12)
               //大端 
         }

5.联合体内嵌结构体
        typedef union XXX
         {
            int all;
            struct
            {
               int b:16;
               int c:16;
            }s;
         }txxx;
         txxx data;
        data.all = 0;
         data.s.b = 0;
6.枚举
        enum
         {
            a = 0,
            b,
            c
         };