C 语言:位段、枚举、联合体
引言
之前我们有写过结构体类型,除了结构体类型以外我们的构造类型还包括位段、枚举、联合体。
位段
位是二进制位
位段的声明和结构是类似的,有两点不同
1.位段的成员碧玺是 int ,unsigned int 或 signed int(char)
2.位段的成员名后边有一个冒号和一个数字
举例
复制代码
枚举
枚举就是一一列举,把可能的取值一一列举。
枚举的定义
enum 枚举名{枚举值列表};
举例:
复制代码
枚举里是常量,比如 MALE 就是 0,FEMALE 就是 1,SECRET 就是 2。所以 main 函数里打印出来的 s 值是 0。
那你可能会问,我要是想定义其他常量数值我难道要一直写下去吗?
当然不用,比如你想用常量值 5,那么你可以 MALE = 5;再打印就是 5 了。
我们之前可以用 #define 定义常量,为什么非要用枚举?
枚举的优点:
1.增加代码可读性和可维护性
2.和 #define 定义的标识符比较,枚举有类型检查,更加严谨
3.防止了命名污染(封装)
4.便于调试
5.使用方便,可以一次性定义多个常量
联合体(共用体)
一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合也叫共用体)
举例
复制代码
共用体所占 4 字节空间,且共用体及其中的 c,i 的地址也都一样。
联合体的特点:大小至少是最大成员的大小(因为它至少得有能力保存最大的那个成员),但同一时刻共用体成员只能用一个。
当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。
数组按一个元素算。
版权声明: 本文为 InfoQ 作者【孤衫】的原创文章。
原文链接:【http://xie.infoq.cn/article/ab8ddd32d433e45a0902ee664】。文章转载请联系作者。
评论