IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 8月22日笔记C语言基础(补4)联合体与枚举2 -> 正文阅读

[C++知识库]8月22日笔记C语言基础(补4)联合体与枚举2

1.联合体问题引入?
?? ?如果一个学生选修课,选择了美术,就不能选择音乐
?? ?如何描述这些互斥的场景呢?用结构体?当然不合适,还有就是空间问题?
?? ?答案是联合体(共用体)
?? ?
2.联合体的基本概念?
?? ?联合体和结构体的结构非常相似,但是有一个本质的区别:
?? ?结构体的每一个成员都是相互各自独立的,而联合体的每个成员都是共用一块内存
?? ?因此联合体又称为共用体。
?? ?
3.联合的定义
?? ?union 联合体名
?? ?{
?? ??? ?成员类型1 成员1;
?? ??? ?成员类型2 成员2;
?? ??? ?...
?? ?};
?? ?语言:联合体名是用来区分不同的联合体
?? ?成员 是包含在联合体内部的数据,可以是任意数据类型
?? ?例子:

union data
?? ?{
?? ??? ?int x;
?? ??? ?char y;
?? ??? ?double z;
?? ?};

4.联合体初始化
?? ?// 普通初始化,只有第一个有效,后面的就无效了,编译会警告,只能初始化第一个成员

?//union data udata = {'k',18,3.14};
?? ?union data udata = {'k'};
?? ?printf("%c,%d,%f\n",udata.x,udata.y,udata.z);

? ?// 指定成员初始化,只有最后一个成员有效

?? ?union data udata1 = {.x = 'a', .y = 20, .z = 3.14};
?? ?printf("%c,%d,%f\n",udata1.x,udata1.y,udata1.z);

? ?// 联合体成员的引用,如果都给成员赋值默认输出的是空间的最大值数据
?? ?// 输出3.14

?? ?union data udata2;
?? ?udata2.x = 'b';
?? ?udata2.y = 100;
?? ?udata2.z = 3.14;
?? ?printf("%c,%d,%f\n",udata2.x,udata2.y,udata2.z);

? ?//联合体指针

?? ?union data *pdata = &udata2;
?? ?pdata->x = 'c';
?? ?pdata->y = 200;
?? ?pdata->z = 4.15;
?? ?printf("%c,%d,%f\n",pdata->x,pdata->y,pdata->z);

5.联合体的内存大小为成员的最大值,如上union data的大小为8字节
?? ?
6.联合体使用场景?? ?
?? ?联合体一般不会单独使用,而是以结构体的成员方式存在,用来表示互斥的效果,即一次只能赋予一个值
?? ?用来表示某种互斥属性,比如学生选修课

?? ?struct student
?? ?{
?? ??? ?char name[20];
?? ??? ?int age;
?? ??? ?union cur
?? ??? ?{
?? ??? ??? ?int yuwen;
?? ??? ??? ?float shuxue;
?? ??? ??? ?double yinyu;
?? ??? ?}d;
?? ?};
?? ?
?? ?int main()
?? ?{
?? ??? ?struct student st[2];
?? ??? ?strcpy(s[0]t.name,"jack");
?? ??? ?st[0].age = 18;
?? ??? ?st[0].d.yuwen = 1;
?? ??? ?
?? ??? ?printf("%d\n",st[0].d.yuwen);
?? ??? ?
?? ??? ?strcpy(s[1]t.name,"rose");
?? ??? ?st[1].age = 19;
?? ??? ?st[1].d.shuxue = 1.1;
?? ??? ?
?? ??? ?printf("%f\n",st[1].d.shuxue);
?? ??? ?
?? ?}



1.枚举类型问题引入
?? ?char 1字节 -128---127 ?0---255,但是有些时候我们不用这么多数据
?? ?比如一周的工作时间,周一到周五 5个数据,有什么数据类型可以描述这场景
?? ?答案是枚举类型
?? ?
2.枚举的定义
?? ?enum 枚举类型名{枚举元素列表}
?? ?enum ? ? ? ? ? {枚举元素列表}
?? ?例子:
?? ?enum weekday{mon,tue,wed,thu,fri};
?? ?
3.枚举成员引用
?? ?enum weekday workday = mon;
?? ?
4.枚举的使用场景dmeo

?? ?enum weekday{mon,tue=100,wed=99,thu,fri};

?? ?enum {up,down,left,right};

?? ?enum {red=0xff0000,green=0x00ff00,blue=0x0000ff};

?? ?int func()
?? ?{
?? ??? ?return up;
?? ?}

?? ?int main()
?? ?{
?? ??? ?enum weekday workday = wed;
?? ??? ?printf("%d,%d,%d,%d,%d,%d\n",mon,tue,wed,thu,fri,workday);
?? ??? ?// 枚举的使用场景
?? ??? ?if(func() == up)
?? ??? ?{
?? ??? ??? ?printf("up\n");
?? ??? ?}
?? ??? ?
?? ??? ?int color;
?? ??? ?switch(color)
?? ??? ?{
?? ??? ??? ?case red:
?? ??? ??? ??? ?printf("处理红色\n");
?? ??? ??? ??? ?break;
?? ??? ??? ?case green:
?? ??? ??? ??? ?printf("处理绿色\n");
?? ??? ??? ??? ?break;
?? ??? ??? ?case blue:
?? ??? ??? ??? ?printf("处理蓝色\n");
?? ??? ??? ??? ?break;
?? ??? ?}
?? ??? ?
?? ??? ?return 0;
?? ?}

总结:
enum weekday{mon,tue,wed,thu,fri}; // mon = 0,tue = 1,wed = 2,thu = 3,fri = 4
1.枚举第一个值默认为0
?? ?比如mon为0,后面的大小依以此类推 1,2,3,4
?? ?
2.如果枚举变量里面某个成员设置了数值,往后的其它成员的数值在它基础上进行累加
?? ?enum weekday{mon,tue=100,wed,thu,fri}; // mon = 0,tue = 100,wed = 101,thu = 102,fri = 103
?? ?
3.枚举常量实际就是一个整型,首个枚举常量默认为0

4.枚举在c语言的作用是增加代码的可读性?? ?
?? ?



? ??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:22:34  更:2021-08-24 15:24:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 6:40:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计