联合体
联合体类型的声明
1. 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。
2. 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间,所以联合体也叫:共⽤体。
3. 给联合体其中⼀个成员赋值,其他成员的值也跟着变化。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> union UN { char a; int b; }; int main() { union UN u = {0}; printf("%d\n", sizeof(u));//4 return 0; }
联合体的特点
1. 联合的成员是共⽤同⼀块内存空间的。
2. 这样⼀个联合变量的大小,至少是最⼤成员的大小。(因为联合体至少得有能⼒保存最⼤的那个成员)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> union UN { char a; int b; }; int main() { union UN u = {0}; printf("%p\n", &u); printf("%p\n", &(u.a)); printf("%p\n", &(u.b));//三者地址相同 return 0; }
联合体大小的计算
1. 联合的大小⾄少是最⼤成员的大小。
2. 当最⼤成员大小不是最⼤对⻬数的整数倍的时候,就要对齐到最大对齐数的整数倍。
#include <stdio.h> union Un1 { char c[5];//5 int i;//4 //8 }; union Un2 { short c[7];//14 int i;//4 //16 }; int main() { //下⾯输出的结果是什么? printf("%d\n", sizeof(union Un1)); printf("%d\n", sizeof(union Un2)); return 0; }
枚举类型
枚举类型的声明
1. 枚举顾名思义就是⼀⼀列举, 把可能的取值⼀⼀列举。
2. { }中的内容是枚举类型的可能取值,也叫枚举常量 。
3. 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。
enum Day//星期 { Mon, Tues, Wed, Thur, Fri, Sat, Sun }; enum Sex//性别 { MALE, FEMALE, SECRET }; enum Color//颜⾊ { RED, GREEN, BLUE }; enum Color//颜⾊ { RED=2, GREEN=4, BLUE=8 };
枚举类型的优点
1. 增加代码的可读性和可维护性。
2. 和#define定义的标识符比较,枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号。
4. 使⽤⽅便,⼀次可以定义多个常量。
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤。
枚举类型的使用
enum Color//颜⾊ { RED=1, GREEN=2, BLUE=4 }; enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值
致谢
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!