昨天介绍了下结构体,今天主要介绍共用体,枚举
共用体
概念:有时需要使几种不同类型的变量存放到同一段内存单元中。
例如,可把一个整型变量、一个字符型变量、一个浮点型变量放在同一个地址开始的内存单元中 。以上三个变量在内存中占的字节数不同,但都从同 地址开始(图中设地址为 1000) 存放。也就是使用覆盖技术,几个变量互相覆盖。这种使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
定义共用体类型变量的一般形式为:
union 共用体名
{
成员列表
}变量列表;
例如:
union data
{
int i;
char ch;
float f;
}a,b,c;
//变量列表也可以在其他函数中定义。
注意:
1.共用体
初始化 — 只能给一个值,默认是给到第一个成员变量的
2.共用体成员变量辅助
共用体用的数据最终存储的应该是最后一次给到的值。
但是只能影响到自己数据类型对应的空间中的数据
3.可以判断大小端
4.实际用途
a.节省空间
b.进行数据转换
5.共用体的大小:是成员变量中最大的那个成员的大小
6.共用体类型可以是函数参数,也可以是函数返回值类型
共用体,结构体类型定义出来之后,
a.定义变量
b.定义数组
c.定义指针
d.做函数参数,返回值类型
eg:
#include<stdio.h>
union str{
int a;
char b;
short c;
};
int main(void)
{
union str d;
d.a = 0x12345678;
d.b = 'a';
d.c = 0x99;
printf("a = %#x\n",d.a);
printf("b = %c:%#hhx\n",d.b,d.b);
printf("c = %#x\n",d.c);
return 0;
}
输出的结果为:
枚举类型
概念:如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
声明枚举类型用 enum 开头。
eg:
enum weekday //enum 枚举类型名
{sun, //名字 --- 代表一个值 --- 符号常量
mon,
tue,
wed,
thu,
fri,
sat
};
注意:
1.枚举类型主要提高了代码可读性
2.枚举类型本质上是int类型
枚举类型与整型类型兼容
3.不足
因为枚举类型本质上是个整型类型,
所以枚举类型的变量的值,并不能真正限定在指定的哪些值范围中。
4.枚举类型
可以做函数形参和返回值
定义数组也可以,本质上就是整型数据。