C语言学习015:联合(union)与枚举(enum)
联合
联合和结构的区别是,结构会为每个字段申请一片内存空间,而联合只是申请了一片内存空间然后所有字段都会保存到这片空间中,这片空间的大小由字段中最长的决定,下面我们就开始定义一个联合
1 //联合的定义 2 typedef union{ 3 short count; 4 float weight; 5 float volume; 6 } quantity;
联合的使用 我们可以通过很多的方式为联合赋值
1 typedef struct{ 2 const char* color; 3 quantity amount; 4 }bike; 5 6 int main(){ 7 //用联合表示自行车的数量 8 bike b={"red",5}; 9 printf("bike color:%s count:%i\n",b.color,b.amount.count); 10 //用联合表示自行车的重量 11 bike b2={"red",.amount.weight=10.5}; 12 printf("bike color:%s count:%f\n",b2.color,b2.amount.weight); 13 return 0; 14 }
但是在读取联合的值的时候会很容易出问题,比如我们保存了一个float类型的字段,但通过short字段读取,得到了与预期毫不相干的值
枚举
为了避免像联合哪样把字段的数据类型搞混乱,我们可以使用枚举
1 #include <stdio.h> 2 3 //枚举的定义和结构很类似 4 typedef enum colors{RED,BLACK,BLUE,GREEN} colors; 5 6 int main(){ 7 colors favorite=BLUE; 8 printf("%i",favorite); 9 return 0; 10 }
如果想要保存多种数据类型l联合毕枚举更适用,那么要保存多条数据的话枚举比联合更适合