联合和枚举
终于到联合、枚举、typedef了,这三个东西学完,这一章也就差不多了。
联合(union)
联合是一种复合变量,关键字为union
。联合在形式上与结构类似,但有本质差别:结构是一种集合,联合算是一种选项。联合可以包含多种成员,但联合只能存储一个成员的值。
union Shuzi{
int zhengshu;
float fudianshu;
char zifu;
}
名为数字的联合变量,我们只能赋给它一个成员的一个值,联合是不能像结构那样存储多个数据的。
union Shuzi A={.zhengshu=10}; //这里使用了初始化器
程序过程中,可以改变联合变量当前表示的成员以及值。
union Shuzi A={.zhengshu=10};
A.zifu='B';
枚举(enum)
枚举类型是用符号名称来表示整形常量的一种方法。枚举的主要作用是提高程序的可读性,适用于代码重构的时候。
enum Baoluo{red,orange,yellow,green,blue,violet};
enum Baoluo color;
color = blue;
printf("%d",color);
最后打印出的是整数4,这说明,枚举类型本质上就是整数,只是把整数用符号名称表示出来而已。枚举Baoluo包含了各种颜色,这些颜色按0到5排序,red本质上是整数0,violet本质上是整数5。
另外,也可以用特定的整数来对应符号名称
enum levels{low = 100,medium = 1000,high=2000};
enum levels A=low;
printf("%d",A);
打印出100。
类型自定义(typedef)
由于诸如结构、枚举、联合这些复杂变量在声明时要写很多个关键字,便产生了我们自定义一段类型声明为简短易读的名称
typedef struct A{char title[20];char author[10];}Book;
Book B={.title="C Prime Plus",.author = "Stan"};
这里把A结构类型自定义为Book名称,在这之后,创建这种结构变量就可以像声明整数那样直接用Book接变量名然后初始化即可。