定义:联合体是不同类型的变量公用一块内存,相互覆盖,同时只能存在一种变量,联合体的大小等于最大成员的大小
- 当结构体有两个相同变量类型的时候,那么这些变量都会被赋值(因为他们用的是同一块内存,自然去相同变量类型取值的时候都能取到)
union MyValue {
int x;
int y;
double z;
};
void main() {
union MyValue d1;
d1.x = 10;
d1.y = 100;
printf("%d,%d,%f",d1.x,d1.y,d1.z);
getchar();
}
打印:10,10,0.000000
- 赋值后的联合体最后一次赋值的变量的值有效
d1.x = 10;
d1.y = 100;
d1.z = 34.8;
printf("%d,%d,%f",d1.x,d1.y,d1.z);
打印:1717986918,1717986918,34.800000
- 应用场景:如果一个函数需要传不同的数据类型的参数的时候,就传入一个联合体。
枚举
和java一样,表示固定的数据
enum Day {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
};
void main() {
enum Day day = Monday;
printf("%d\n",day);
}
打印:0
枚举的成员定义用“,”隔开,直接用枚举里面的变量名称可以赋值,里面的值(如:Monday)默认值为0;从0开始一次是1、2、3...,但是也是可以赋值的,如:
enum Day {
Monday = 1,
Tuesday ,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday,
};
这样样子的话Tuesday为2,一次递增1,后面的值为3、4、5、6、7。
还要一种情况就是部分赋值
enum Day {
Monday = 1,
Tuesday,
Wednesday = 6,
Thursday,
Friday,
Saturday,
Sunday,
};
enum Day day = Tuesday;
printf("%d\n",day);
day = Thursday;
printf("%d\n",day);
打印:
2
7
这种情况就是赋值的那个之开始递增,碰到有自定义的赋值,之后从新的值递增,就上面而言Monday = 1,Tuesday = 2,到了Wednesday的时候我们自己赋值为6,那么Thursday从6递增,为7,以此类推。
其实枚举里面的成员只能是int类型,相当于int Monday = 1;只是把int省略掉了。
- 另外枚举是不能够遍历的,遍历不要连续内存。
网友评论