🌈 个人主页:白子寰
🔥 分类专栏:魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分78.8+),分享更多关于深度学习、C/C++领域的优质内容!(希望得到您的关注~)
目录
联合体
联合体的特点是所有成员共用同一块内存空间。所以联合体也叫共用体
联合体类型的声明
union Un
{
int i;
char ch;
};
int main()
{
union Un p = { 0 }; //联合变量的定义
printf("%zd\n", sizeof(p)); //计算联合变量的大小
return 0;
}
注:联合体也类似结构体,结构体中的struct必不可少,同理,联合体中的union必不可少
联合变量的大小
控制台输出:4
为什么呢?我们再来观察联合体中 i 和 ch 的地址
union Un
{
int i;
char ch;
};
int main()
{
union Un p = { 0 }; //联合变量的定义
printf("%zd\n", sizeof(p)); //计算联合变量的大小
printf("%p\n", &p.i);
printf("%p\n", &p.ch);
return 0;
}
控制台输出:
代码结果解释
那还有疑问,为什么这两个的地址要这样做存放呢?
这得谈及我们上面👆说到的联合体的特点;
这里我们具体再说一下联合体的特点:
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)
联合体和结构体的对比
联合体的作用
最大作用就是可以节省空间
举个栗子:
价格:price ;类型:type ;大小:size ;标签:label ;颜色:colour
我们可以这样子用联合体:
struct study_set
{
//公共
int price;
char type;
//特殊
union
{
struct
{
char colour; //颜色
}pencil_book; //笔盒
struct
{
char label; //标签
}book; //书本
struct
{
int size; //大小
}book_shelf; //书架
}item;
};
枚举类型
枚举 -- 把可能的取值一一列举
一个星期有七天--1,2...7;
一年有12个月份--1,2...12
例如一周的天数
注:枚举也像结构体,联合体一样有关键字,枚举的关键字是enum
#include<stdio.h>
//一周的天数
enum Day
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
int main()
{
printf("%d\n", Mon);
printf("%d\n", Tues);
printf("%d\n", Wed);
//...
printf("\n");
printf("%d\n", Sun);
return 0;
}
来看看这段代码输出什么?
以上是编译器设置的最初始默认值,也可以自己设置
#include<stdio.h>
//一周的天数
enum Day
{
Mon=1,
Tues=9,
Wed=10,
Thur,
Fri,
Sat,
Sun
};
int main()
{
printf("%d\n", Mon);
printf("%d\n", Tues);
printf("%d\n", Wed);
//...
printf("\n");
printf("%d\n", Sun);
return 0;
}
控制台输出:1 9 10 14
枚举类型优点
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使用方便,⼀次可以定义多个常量
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使用
***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:“故事里摧坏的只有风景,谁也摧毁不了我们的梦境”。
我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!!
好了划走吧。