美文网首页
联合体、枚举和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