一.联合体

cpp
union u
{
char c;
int u;
};
int main()
{
union u uu;
printf("%zd\n", sizeof(uu));
printf("%p\n", &uu);
printf("%p\n", &(uu.c));
printf("%p\n", &(uu.u));
return 0;
}






相同成员的结构体和联合体对比


联合体大小的计算

cpp
union Un1
{
char c[5];//5
//1 8 1
int i;//4 8 4
};
union Un2
{
short c[7];//14
int i;//4
};
int main()
{
printf("%zd\n", sizeof(union Un1));//8
printf("%zd\n", sizeof(union Un2));//16
return 0;
}



对于不同的商品,我们只使用一种类型,所以这样就能节省一定的空间
cpp
union U
{
int n;//4
struct S
{
char c1;
char c2;
char c3;
char c4;
}s;//4
};
int main()
{
union U u = { 0 };
u.n = 0x11223344;
printf("%x %x %x %x\n", u.s.c1, u.s.c2, u.s.c3, u.s.c4);
return 0;
}

写一个程序,判断当前机器是大端?还是小端?
cpp
int check_sys()
{
int n = 1;//01 00 00 00 00 00 00 01
return *(char*)&n;
}
int check_sys()
{
union
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
二.枚举类型

cpp
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
cpp
enum Color//颜⾊
{
RED,
GREEN,
BLUE
};

cpp
//枚举的关键字
enum Sex
{
//这里列举枚举enum Sex的可能取值
//这些可能取值是常量,也叫枚举常量
MALE=5,
FEMALE=8,
SECRET=10
};
//#define MALE 5
#define MAX 10
int main()
{
printf("%d\n", MALE);
printf("%d\n", FEMALE);
printf("%d\n", SECRET);
enum Sex s = MALE;
s = FEMALE;
return 0;
}
1.枚举类型的优点

2.枚举类型的使用


