结构体 struct 类型定义
点运算符 . 变量名.成员 成员是数组的时候不能用等于号赋值
箭头运算符 -> 指针->成员
作用 存放多个不同类型的有关联的数据

与结构体类似的类型
1、联合
作用 :存放不同类型的数据 (共同体) 同事只能存储一个数据
关键字 :union 和结构体类似
联合与结构体的区别:
结构体:
是每个成员有地址分配 即有单独的内存 所以对其中一个元素赋值的时候不会影响其他元素的值
结构体大小时所有成员之和 结构体>=所有成员之和(大于的原因 结构体的对齐)
联合:
是共用内存 通一时间只能存放一个值 所以只能保证最后一次的赋值是正确的,其他的不能保证
联合的大小是所有成员大小的最大值 联合的大小>=所有成员大小的最大值(对齐)

结构体就像是一个 “大炕” 可以睡很多人 互不影响
联合就像是一个 “小床” 只能睡一个人 相互有影响的

联合的优点
1.定义新的变量 需要分配内存(栈区)
(可以形象的比喻成上体育课老师给学生发球,如果老师给每个人都发一个球就好像是是给每个变量都分配一个内存空间,这很耗费时间;
之后下课后老师收球也要一个一个的收回来,有很多,会很耗费时间,就好像是对变量在内存中占用的空间的的释放,很耗费时间。
所以如果老师只发一个球,每个人拍一下传递给下一个人,这样老师发球收球都不会耗费太多时间,而学生都会玩到球。
因此联合就是类似于这种情况,节省了空间时间)
2.可以结合数据的特征 进行分离
int 4个字节 --->可以定义一个联合对每一个字节分开处理
(电脑存储方式 大端->服务器上 小端->一般电脑)
(栈区内存自动释放 堆区内存需要手动释放)

枚举 列举出所有可能的值
关键字 enum
1.赋值的时候 是列举出可能的值 不用担心其他值(无效值)
用的是名称 可以用于case 不用担心遗漏或者对应关系错误导致的问题
直观 容易理解 不容易出错
2.枚举值是常量 每个值都对应一个数字
可以手动赋值 对第一个赋值之后 后面的默认加一
枚举类型是整型常量
注意:枚举定义的时候 枚举值名字不要重复
枚举是场量 可以用大写区分变量
不要加单引号和双引号

switch
扫雷中 0 1 2 3 4
箱子中 箱子 人 墙 目的地
用switch判断数据实现
用case表示 用数字和元素一一对应 对应关系用注释说明清楚 如果匹配出错不太好检查
case 1: //表示墙
case 2: //人
case 3: //箱子
case 4: //目的地

测试代码笔记如下:

 #include<stdio.h>

 struct MyStruct  //结构体
{
int a;
float b;
double c;
}; union MyUnion //联合 优点一验证
{
int a;
float b;
double c;
}; union Myint //联合 优点二验证
{
int a;
char arr[]; }; enum map //枚举的示例1
{
wall,people,box,aim //墙 人 箱子 目的地
}; enum dir //方向键枚举
{
UP,DOWN,LIEFT,RIGHT
}; int main()
{
#if 0
//-------------------结构体-------------------- struct MyStruct oug;
oug.a = ;
oug.b = ;
oug.c = ;
printf("结构体输出结果:%d %f %lf\n 结构体大小:%d\n", oug.a, oug.b, oug.c,sizeof(oug));
#endif //--------------------联合----------------------
#if 0
//联合的第一优点示例
union MyUnion danny;
danny.a = ;//在给.b赋值之前是一直有效的 以下同理
danny.b = ;
danny.c = 3.141592654;
printf("联合的输出结果:%d %f %.10lf\n 联合的大小:%d\n", danny.a,danny.b,danny.c,sizeof(danny)); //%.10lf 格式占位符 控制输出数据的精度 printf中%f %lf 没有区别的
//乱码的定义 输出不符合预期的都是乱码
#endif #if 0
//联合的第二优点示例 (共用内存!=共用值)
union Myint test;
test.a= 0x414243;//(65的十六进制是41 在ASCII码中65是A)
printf("打印结果%s\n", test.arr); //结果是CBA
printf("打印结果%d\n", test.a); //结果是414243 #endif //--------------------枚举----------------------
#if 1
//枚举的示例1
enum map point; //枚举变量
point = box; //赋值 赋已经列举所有值
switch (point) //在vs中使用table键 用switch方式可以自动列举出所有的值
{
case wall:
break;
case people:
break;
case box:
break;
case aim:
break;
default:
break;
}
printf("wall=%d\n", wall);
printf("people=%d\n", people);
printf("box=%d\n", box);
printf("aim=%d\n", aim); #endif getchar();
return ;
}

附:

2019-03-28  10:22:21

C++学习(二十六)(C语言部分)之 结构体3(联合,枚举)的更多相关文章

  1. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  2. 二十四、V4L2框架主要结构体分析和虚拟摄像头驱动编写

    一.V4L2框架主要结构体分析 V4L2(video for linux version 2),是内核中视频设备的驱动框架,为上层访问视频设备提供统一接口. V4L2整体框架如下图: 图中主要包括两层 ...

  3. C语言基本语法——结构体、联合和枚举

    一.结构体 1.什么是结构体 2.结构体语法格式 3.结构体所占内存空间 4.结构体成员赋值 二.联合 1.什么是联合 2.联合语法格式 三.枚举 1.什么是枚举 2.枚举语法格式 一.结构体 1.什 ...

  4. ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析

    1.preference 首先引入一个bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询打到不同的replica shar ...

  5. JavaWeb学习 (二十六)————监听器(Listener)学习(二)

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  6. 前端学习(二十六)移动端s(笔记)

    ===================================================弹性布局rem布局---------------------------------------- ...

  7. ballerina 学习二十六 项目docker 部署&& 运行(二)

    ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...

  8. Salesforce LWC学习(二十六) 简单知识总结篇三

    首先本篇感谢长源edward老哥的大力帮助. 背景:我们在前端开发的时候,经常会用到输入框,并且对这个输入框设置 required或者其他的验证,当不满足条件时使用自定义的UI或者使用标准的 inpu ...

  9. 【学习笔记】【C语言】指向结构体的指针

    1.指向结构体的指针的定义 struct Student *p;  2.利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 3.代码 #include < ...

随机推荐

  1. Java Web(十一) 文件上传与下载

    文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将 ...

  2. Win10系列:UWP界面布局基础2

    属性设置 在面向对象程序开发中,所提及的属性通常指的是对象的属性.在XAML代码中,定义元素时也可以为其设置属性,例如对于一个TextBox元素,有背景属性.宽度属性和高度属性等.为了满足实际应用的需 ...

  3. Vue + Element UI 实现权限管理系统(搭建开发环境)

    技术基础 开发之前,请先熟悉下面的4个文档 vue.js2.0中文, 优秀的JS框架 vue-router, vue.js 配套路由 vuex,vue.js 应用状态管理库 Element,饿了么提供 ...

  4. 读书笔记 C# 接口之浅析

    一.接口可以包含 属性.方法.事件和索引器: 二.接口不能被实例化: 三.一个类可以继承多个接口: 四.接口不能包含方法的实现: 五.继承接口的类必须实现接口中所有成员: 六.显式实现接口的成员,不能 ...

  5. 顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  6. thymeleaf之下拉框回显选中

    #1.select下拉框取值    <div class="form-group ">        <label id="resource" ...

  7. AMR11A - Magic Grid

    Thanks a lot for helping Harry Potter in finding the Sorcerer's Stone of Immortality in October. Did ...

  8. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  9. Spring学习四

    1先导入 Asject的jar包 2配置文件加入标签 ,并加入 <aop:aspectj-autoproxy proxy-target-class="true">(如果 ...

  10. 20165326 java第四周学习笔记

    第四周学习笔记 ch5 子类和父类 子类只能有一个父类 使用关键字extendsyclass 子类 extends 父类 系统默认的祖先类Object(java.lang包中) 继承:子类继承父类的方 ...