目录
知识点1【共用体】(了解)
共用体也叫联合体,使几个不同类型的变量共占一段内存(相互覆盖),也就是说共用体的成员共用一片内存,后赋值的成员变量的数据才是共用体的生效数据,因为前面的赋值已经被覆盖了。共用体所占内存至少能够容纳最大的成员变量所需的空间,应用场景,比如需要一种既可以存储int型数据也可以存储double型数据的变量。
共用体和结构体 区别:
结构体的成员拥有独立的空间
共用体成员共享同一份的空间, 空间的大小由最大的成员类型长度决定
案例1:
共用体的成员虽然共享同一块空间 但是成员操作空间的大小由自身大小决定。
共用体的空间用 最大的成员 决定
union data
{
char a;
short b;
int c;
};
void test05()
{
union data A;
printf("%d\n",sizeof(union data));//4
A.a = 10;
A.b = 20;
A.c = 30;
//共用体是最后一次 赋值有效(不严谨)
printf("%d\n", A.a+A.b+A.c);//90
}
案例:
union data
{
char a;
short b;
int c;
};
void test05()
{
union data A;
printf("%d\n",sizeof(union data));//4
A.c = 0x01020304;
A.b = 0x0102;
A.a = 0x01;
printf("%#x\n", A.a+A.b+A.c);//0x01020203
}
知识点2【枚举】
枚举:将变量要赋的值 一一列举出来
enum poke_color{HONGTAO, MEIHUA, FANGKUAI, HEITAO};
enum poke_color p_color;//p_color只能赋HONGTAO, MEIHUA, FANGKUAI, HEITAO中的某一个值
//枚举列表的值 默认是从0开始
enum POKER{ HONGTAO, HEITAO=30, MEIHUA=40, FANGKUAI };
void test06()
{
//poker_color 的取值为HONGTAO, HEITAO, MEIHUA, FANGKUAI中某一个
enum POKER poker_color = HEITAO;
printf("poker_color = %d\n", poker_color);//30
printf("HONGTAO = %d\n", HONGTAO);//0
printf("HEITAO = %d\n", HEITAO);//30
printf("MEIHUA = %d\n", MEIHUA);//40
printf("FANGKUAI = %d\n", FANGKUAI);//41
}
enum poke_color{HONGTAO, MEIHUA, FANGKUAI, HEITAO};
void test02()
{
//p_color只能赋HONGTAO, MEIHUA, FANGKUAI, HEITAO中的某一个值
enum poke_color p_color;
p_color = MEIHUA;
printf("p_color = %d\n", p_color);//1
//默认情况下 枚举的符号常量 从0开始递增
printf("%d %d %d %d\n", HONGTAO, MEIHUA, FANGKUAI, HEITAO);//0 1 2 3
//可以在定义枚举符号常量时 修改枚举符号常量的值
enum poke_color2{HONGTAO, MEIHUA=5, FANGKUAI, HEITAO};
printf("%d %d %d %d\n", HONGTAO, MEIHUA, FANGKUAI, HEITAO);//0 1 2 3
}
知识点3【结构体 与 共用体 的区别】
在书写形式上,其实共用体与结构体并没有太大的区别,只不过共用体在前面的书写为union,而结构体的书写为struct。
真正的区别为:在共用体中每个成员使用的都是同一块内存空间,而结构体的每一个成员都是占用不同的内存空间
那么既然共用体与结构体如此相似,为何我们补直接使用结构体呢?是因为内存真的不够我们使用么?其实不然。
结构体:struct
所有的成员拥有独立的空间
struct stu
{
char a;
short b;
int c;
};// a b c成员有用独立的空间