文章目录
- 一、枚举常量
-
- 1.枚举常量的定义
- 2.枚举常量的优点
- 二、联合体(共用体)
-
- 1.联合体类型的定义
- 1.联合体中的变量
- 2.联合体大小的计算
- 感谢阅读,如有错误请批评指正
一、枚举常量
枚举常量顾名思义就是把可能的取值依次列举,且这些可能的取值具有常量的属性。
比如:
一周的星期一到星期日是有限的7天,可以依次列举。
性别有男、女,也可以依次列举。
月份有12个月,也可以依次列举。
要记录这些可能的取值,数组当然可行,但C语言提供了一种更加方便的方式:枚举。
1.枚举常量的定义
代码如下(示例):
enum Weekday//星期
{
Mon,//常量间用逗号分开
Tue,
Wed,
Thu,
Fri,
Sat,
Sun//注意最后一个常量后没有逗号
};
enum Sex
{
Male,
Female
}
这些枚举常量中的常量都有对应的值,默认第一个常量从0开始,依次递增1,当然在定义的时候也可以赋初值。
代码如下(示例):
enum Weekday1
{
//不赋初始值,默认从0开始递增1
Mon,//0
Tue,//1
Wed,//2
Thu,//3
Fri,//4
Sat,//5
Sun//6
};
enum Weekday2
{
//给某个常量赋初始值,则从该常量开始递增1
//该常量之前的不受影响
Mon,//0
Tue,//1
Wed = 10,//10
Thu,//11
Fri,//12
Sat,//13
Sun//14
};
2.枚举常量的优点
我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点:
(1) 增加代码的可读性和可维护性
(2) 和#define定义的标识符比较枚举有类型检查,更加严谨
(3) 防止了命名污染(将常量封装起来)
(4) 便于调试
(5) 使用方便,一次可以定义多个常量
二、联合体(共用体)
1.联合体类型的定义
联合体也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以联合体也叫共用体)。
代码如下(示例):
//联合类型的声明
union Un
{
char c;
int i;
double d;
};
//联合变量的定义
union Un un;
1.联合体中的变量
由于联合体中的变量共用同一块空间,所以在改变其中一个值的时候会影响到其他的值。
代码如下(示例):
union Un
{
int a;
int b;
int c;
};
int main()
{
union Un un;
//下面的三个地址均相同
printf("%d\n", &(un.a));
printf("%d\n", &(un.b));
printf("%d\n", &(un.c));
un.a = 1;
printf("%d\n", un.b);//1
printf("%d\n", un.c);//1
un.b = 2;
printf("%d\n", un.a);//2
printf("%d\n", un.c);//2
return 0;
}
2.联合体大小的计算
联合体的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
代码如下(示例):
union Un1
{
char c[5];
int i;
};
union Un2
{
short s[7];
int i;
};
printf("%d\n", sizeof(union Un1)); //8
//c数组占5个字节,对齐数为1;i变量占4个字节,对齐数为4
//联合体大小至少为5个字节,对齐到最大对齐数的整数倍,即为8
printf("%d\n", sizeof(union Un2));//16
//s数组占14个字节,对齐数为2;i变量占4个字节,对齐数为4
//联合体大小至少为14个字节,对齐到最大对齐数的整数倍,即为16