1. 联合体类型的声明
2. 联合体的特点
3. 联合体⼤⼩的计算
4. 枚举类型的声明
5. 枚举类型的优点
6. 枚举类型的使⽤
光阴如骏马加鞭
一、联合体
概念:像结构体一样,联合体也是由一个或者多个成员组成的,这些成员也可以是不同的类型。
这里我们需要注意的是:编译器只会为最大的成员分配足够内存空间。联合体的特点是所有成员共用一块内存空间。
所以联合体,又叫共用体
- 给联合体内部的一个值赋值,其它的值也会跟着变化
union s
{
char i ;
int a;
};
int main()
{
printf("%zd ", sizeof(union s));
return 0;
}
那么 为什么结果是4呢?
1.2 联合体的特点:因为联合体是共用一块空间的,所以联合体至少要有能够保护最大的能力。
这里我们来用代码来检验一下
union s
{
char i ;
int a;
};
int main()
{
union s s1 ;
printf("%p\n", &(s1.i));
printf("%p\n", &(s1.i));
printf("%p\n", &(s1));
return 0;
}
union s
{
char c ;
int i;
};
int main()
{
union s s1 = {0};
s1.i = 0x11223344;
s1.c = 0x55;
printf("%x\n", s1.i);
return 0;
}
为什么输出结果是这样的呢?接下来我们就来画图解释
1.3相同成员的结构体和联合体对比
我们能够看出来的是,联合体会很好的节约空间
这里我们来写一个判断程序的大小端的代码
int test()
{
union s
{
char i;
int a;
}s1;
s1.a = 1;
return s1.a ;
}
int main()
{
int ret = test();
if (ret == 1)
{
printf("小端");
}
else
{
printf("大端");
}
return 0;
}
二、 枚举类型
2.1枚举类型的声明
枚举类型我们从表面的意思就可以很好的了解,是一一例举出来的意思。
例子:
1.一年的月份 1到12月
2.一周的天数:星期一到星期日
3. 性别 男 女 保密
等
这些类型我们就可以用枚举了
enum Day
{
Mon,
Tue,
Wed,
Thur,
Fri,
Sat,
Sun,
};
int main()
{
return 0;
}
{ }的内容都是枚举类型的可能取值,我们称之为枚举常量。
在声明枚举类型的时候我们是可以给其赋值的。
enum Day
{
Mon = 1,
Tue = 2 ,
Wed = 3,
Thur= 4,
Fri = 5,
Sat = 6,
Sun = 7,
};
int main()
{
return 0;
}
2.2枚举类型的优点
我们为什么要使用枚举呢?
#define就可以定义常量我们为什么非要使用枚举类型呢?
1.增加代码的可读性和可维护性
2.与define定义的标识符相比较,枚举类型更容易检查,更加严谨。
3.方便调试,用define定义的常量在预处理阶段会被替换
4.方便使用,可以定义多个常量
5.遵循作用域的规则
2.3 枚举类型的使用
这里我们发现,在c语言中我们可以拿整数给枚举变量赋值,但是在c++中这是不行的。