《C Prime Plus》14.10~14.12学习笔记

68 阅读2分钟

联合和枚举

终于到联合、枚举、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接变量名然后初始化即可。