Loading

c_cpp-共用体和枚举类型

共用体

共用体就是多个不同类型的数据共用一个内存空间

定义
union MyUnion{
	int i;
	char c;
	float f;
};
初始化
union MyUnion myUnion;
//不能对多个成员同时初始化
union MyUnion myUnion1 = {16};//对第一个初始化
union MyUnion myUnion2 = { .c = 'j' };//对指定的进行初始化
使用
myUnion.i = 97;
printf("%d\n", myUnion.i);
printf("%c\n", myUnion.c);
printf("%f\n", myUnion.f);

运行结果

因为输入的是设置的是97 而共用体是内存复用的,所以当使用char读取的时候就会读取到最后一个字节,内容就是‘a’ ,同样浮点型数据也是如此

枚举
enum Weekday
{
	sun,mon,tue,wed,thu,fri,sat
};

void enumTest(){
	enum Weekday workday, weekend;
	workday = mon;
	weekend = sat;
}

赋值的时候必须是定义枚举的时候里面已经有的常量
每个枚举元素都代表一个整数,默认的情况下是从0开始按顺序计数
如sun=0,mon=1,······以此类推
可以直接输出

printf("sum=%d\n", sun);
printf("workday=%d", workday);


也可以在定义的时候设置值,未设置的默认在前一个的基础上+1

enum Weekday
{
	sun = 7,mon,tue=2,wed,thu,fri,sat
};
void enumTest(){
	enum Weekday workday, weekend;
	workday = mon;
	weekend = sat;
	printf("sum=%d\n", sun);
	printf("mon=%d\n", mon);
	printf("tue=%d\n", tue);
	printf("wed=%d\n", wed);
	printf("workday=%d", workday);
}


人为设置可能造成值的重复

enum Weekday
{
	sun = 7,mon,tue=6,wed,thu,fri,sat
};

void enumTest(){
	enum Weekday workday, weekend;
	workday = mon;
	weekend = sat;
	printf("sum=%d\n", sun);
	printf("mon=%d\n", mon);
	printf("tue=%d\n", tue);
	printf("wed=%d\n", wed);
	printf("workday=%d\n", workday);
	if (sun == wed){
		printf("sun == wed");
	}
	else{
		printf("sun != wed");
	}
}

image.png

posted @ 2021-03-25 19:46  克豪  阅读(94)  评论(0)    收藏  举报