🌈 个人主页:白子寰
🔥 分类专栏:魔法指针,进阶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. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使用
***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:“故事里摧坏的只有风景,谁也摧毁不了我们的梦境”。
我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!!
好了划走吧。