图书建设网站,建筑结构设计软件,网络营销模式不是孤立存在的,淘客手机网站模板C语言的自定义类型有四个分别是#xff1a;数组#xff1b;结构体#xff08;struct#xff09;#xff1b;联合体#xff08;union#xff09;#xff1b;枚举#xff08;enum#xff09;。前面已经讨论过数组和结构体#xff0c;这期让我们来学习一下联合体和枚举…C语言的自定义类型有四个分别是数组结构体struct联合体union枚举enum。前面已经讨论过数组和结构体这期让我们来学习一下联合体和枚举类型。
一、联合体类型
1、联合体类型的声明 与结构体相似联合体也是由一个或者多个成员构成这些成员可以是不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫共用体。 给联合体其中一个成员赋值其他成员的值也跟着变化。
2、联合体的特点 由上述代码运行结果可知联合的成员是共用同一块内存空间的各个成员的起始地址和整个联合体的起始地址都相同这样的话我们也可以推知一个联合变量的大小至少是最大成员的大小因为联合至少得有能力保存最大的那个成员。
联合体的成员在同一时间只能使用其中一个成员。
3、联合体大小的计算
1联合的大小至少是最大成员的大小。 2当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍。
使用联合体是可以节省空间的。
4、相同成员的结构体和联合体对比 5、通过判断大小端程序进一步认识联合体
#includestdio.h int check(); union Un { int i; char c; }un; int main() { un.i 1; if (check()) { printf(小端\n); } else { printf(大端\n); } } int check() { return un.c; } 二、枚举类型
1、枚举类型的声明
枚举顾名思义就是一一列举。把可能的取值一一列举。比如我们现实生活中
一周的星期一到星期日是有限的 7 天可以一一列举性别有男、女、保密也可以一一列举月份有 12 个月也可以一一列举三原色也可以一一列举。这些数据的表示就可以使用枚举了。 以上定义的enum Day就是枚举类型。
{}中的内容是枚举类型的可能取值。也叫枚举常量。这些可能取值都是有值的默认从0开始依次递增1当然在声明枚举类型的时候也可以赋初值。 2、枚举类型的优点
我们知道可以使用 #define 来定义常量那么枚举到底有什么魔力可以让我们心甘情愿地使用枚举呢
1枚举增加了代码的可读性和可维护性 2和 #define 定义的标识符相比枚举有类型检查更加严谨 3枚举便于调试而 #define 定义的符号在预处理阶段会被删除 4枚举使用方便一次可以定义多个常量 5枚举常量是遵循作用域规则的如果枚举声明在函数内就只能在函数内使用。
3、枚举类型的使用 需要注意的是在C语言中可以拿整数给枚举变量直接赋值但是在C中是不可以的因为C中类型检查更加严格。