共用体
共用体就是多个不同类型的数据共用一个内存空间
定义
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
网友评论