enum枚举/union共用体

发布时间 2023-07-25 21:02:07作者: 小蠕虫

//联合体——共用体
// 所有成员共用同一块空间(地址)
// 共用体占用的内存至少是最大成员的大小,单位 -字节
// 同一时刻只能用一个成员
// 当最大成员不是最大对齐数的整数倍,就要对齐到最大对齐数的整数倍
//

union un
{
char c;
int i;
};
union U
{
char arr[5];//元素类型是char 对齐数是1 默认对齐数是8 则arr的对齐数是1
int i;//对齐数是4 单位是字节
};

int check_sys()
{
union //匿名创建
{
char c;
int i;
}u;
u.i = 1;
return u.c;
//返回0是大端 返回1是小端
}
int main()
{
int ret = check_sys();
if (1 == ret)
{
printf("当前是小端存储\n");
}
else
printf("当前是大端存储\n");
union U u;
printf("%zd\n", sizeof(u));
int a = 1;
if (1 == *(char*)&a)
{
printf("当前是小端存储\n");
}
else
printf("当前是大端存储\n");
union un u;
printf("%zd\n", sizeof(u));
printf("%p\n", &u.c);
printf("%p\n", &u.i);//地址相同
printf("%p\n", &u);
return 0;
}
//枚举类型
//1,增加了代码的可读性和可维护性
//2,和#define定义的标识符比较,枚举有类型检查,更加严谨
//3,防止了命名污染(封装)
//4,便于调试
//5,使用方便,一次可定义多个常量
//
enum sex
{
//枚举的可能取值 --枚举常量
male =1,
femall,
secret//元素用逗号隔开
};//分号结尾

enum color
{
red,
green,
blue
};

int main()
{
enum sex s = male;
enum color c = blue;
printf("%zd\n", sizeof(s));//大小 4个字节 由编译器指定整型大小
printf("%d %d %d\n", male, femall, secret);//1 2 3
printf("%d %d %d\n", red, green, blue);//0 1 2
return 0;
}