共用体和枚举
共用体(联合体)
使几个不同的变量占用同一段内存空间的结构称为联合。
共用体与结构体的定义类似:
union MyUnion //union 联合类型名
{
int num; //成员列表
char name[10];
};
联合与结构体相似之处:
- 都是由不同类型(相同也行)的数据组成
- 都只能逐个引用成员进行操作
共用体特点:
- 系统采用覆盖技术,实现共用变量各成员的内存共享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。
- 由于所有成员共享同一内存空间,故共用变量与其各成员的地址相同。
- 在共用体变量定义的同时只能用第一个成员的类型值进行初始化
- 共用类型可以出现在结构类型定义中,反之亦然。
- 共用体所占内存大小,为占内存最大的那个成员变量的大小。
例:
union MyUnion
{
int num;
char name[10];
};
union MyUnion maye = {126}; //right
union MyUnion maye = {126, "abd"}; //wrong 只能赋值一个变量成员
共用体实例:
int main(void)
{
typedef struct myfriend
{
int a;
union info
{
char cc[3];
int ccc;
}cmd;
}ABD;
ABD maye = {4, 4};
ABD mayre_1 = {4, "cc"};
printf("%d %s\n", mayre_1.a, mayre_1.cmd.cc);
printf("%d %d", maye.a, maye.cmd.ccc);
return 0;
}
枚举
具有有限个整型符号常量的集合,这些整型符号常量称为枚举常量。
定义方式:
enum Week //enum 枚举类型名
{
星期一, //!!每个枚举变量中间用逗号隔开
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
};
枚举类型有什么用?
- 在实际应用中,有些变量的取值范围是有限的,仅可能只有几个值,如一个星期7天, 一年12个月,一副扑克有4种花色,每一花色有13张牌等。
- 整型数来表示:直观性差,如1,在别让看来可能就是数字1,或者星期一,或者一月份,难以区分!
- 由此看出,为提高程序的可读性,引入非数值量即一些有意义的符号是非常必要的。
枚举使用说明:
- 每一个枚举常量的值取决于,在定义时排列的顺序,第一个枚举常量的序号为0,然后依次加1。如果想要更改第一个成员常量的值,那么只需要针对第一个成员常量进行赋值就可以。
- 若想改变枚举常量的值,只能在枚举变量定义时由程序员指定。
enum Week
{
星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日,
};
enum Week week[7] = {星期一, 星期二,星期三,星期四,星期五,星期六,星期日};
for (int i = 0; i < 7; i++)
{
printf("%d", week[i]);
}