美文网首页
联合体、枚举和typedef

联合体、枚举和typedef

作者: 木鱼_cc | 来源:发表于2018-05-23 17:17 被阅读0次

    1.联合体(联合体所有成员共享一块内存)

    联合union是一个能在同一个存储空间存储不同类型数据的类型。
    联合体所占的内存长度等于其最长成员的长度,也有叫做共用体。
    联合体虽然可以有多个成员,但同一时间只能存放其中一种。

    union man{
           int a;
           char b;
           int c;
           char d;
           int *p;
    };
    int main(){
           union man m;
           m.b = 20;
           m.a = 1;
           printf("%d\n",m.b);//输出了0
    
           m.a = 0x12345678;
           m.b=0;
           printf("%x\n",m.a);//输出了12345600,因为a是int,b是char,只覆盖了小端
    
          printf("%lu\n",sizeof(m));//输出4
          printf("%p,%p,%p,%p,%p\n",&m,&m.a,&m.b,&m.c,&m.d);//地址输出全部都一样!
    
    m.p = malloc(10 * sizeof(int));
    //m.a2=0; 联合体变量的任何一个成员复制都会影响其他变量的值
    free(m.p);
    
    return 0;
    }
    

    2.枚举类型

    可以使用枚举(enumerated type)声明代表整数常量的符号名称,关键字enum创建一个新的枚举类型。

    实际上,enum常量是int类型的

    enum mySex {male,female};//默认时,枚举列表中的常量被指定为0,1,2等
    
    struct man{
        char name[20];
        int age;
        enum mySex sex;
    };
    
    int main(){
       struct man m;
        strcpy(m.name,"刘德华");
        m.age = 30;
        m.sex = male;
    
    return 0;
    
    }
    
    

    3.typedef 改名

    typedef是一种高级数据特性,它能使某一类型创建自己的名字

    typedef unsigned char BYTE
    typedef 数据类型 别名 
    typedef struct man M
    
    • 与#define不同,typedef仅限于数据类型,而不是能是表达式或具体的值
    • typedef是编译器处理的,而不是预编译指令
    • typedef比#define更灵活

    直接看typedef好像没什么用处,使用BYTE定义一个unsigned char。使用typedef可以增加程序的可移植性。

    相关文章

      网友评论

          本文标题:联合体、枚举和typedef

          本文链接:https://www.haomeiwen.com/subject/qaorjftx.html