C++学习(二十六)(C语言部分)之 结构体3(联合,枚举)
结构体 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(联合,枚举)的更多相关文章
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- 二十四、V4L2框架主要结构体分析和虚拟摄像头驱动编写
一.V4L2框架主要结构体分析 V4L2(video for linux version 2),是内核中视频设备的驱动框架,为上层访问视频设备提供统一接口. V4L2整体框架如下图: 图中主要包括两层 ...
- C语言基本语法——结构体、联合和枚举
一.结构体 1.什么是结构体 2.结构体语法格式 3.结构体所占内存空间 4.结构体成员赋值 二.联合 1.什么是联合 2.联合语法格式 三.枚举 1.什么是枚举 2.枚举语法格式 一.结构体 1.什 ...
- ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析
1.preference 首先引入一个bouncing results问题,两个document排序,field值相同:不同的shard上,可能排序不同:每次请求轮询打到不同的replica shar ...
- JavaWeb学习 (二十六)————监听器(Listener)学习(二)
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- 前端学习(二十六)移动端s(笔记)
===================================================弹性布局rem布局---------------------------------------- ...
- ballerina 学习二十六 项目docker 部署&& 运行(二)
ballerina 从发布,到现在官方文档的更新也是很给力的,同时也有好多改进,越来越好用了 可以参考官方文档 https://ballerina.io/learn/by-guide/restful- ...
- Salesforce LWC学习(二十六) 简单知识总结篇三
首先本篇感谢长源edward老哥的大力帮助. 背景:我们在前端开发的时候,经常会用到输入框,并且对这个输入框设置 required或者其他的验证,当不满足条件时使用自定义的UI或者使用标准的 inpu ...
- 【学习笔记】【C语言】指向结构体的指针
1.指向结构体的指针的定义 struct Student *p; 2.利用指针访问结构体的成员 1> (*p).成员名称 2> p->成员名称 3.代码 #include < ...
随机推荐
- Java中的标签
@SuppressWarnings 简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量 ...
- Linux系统默默改变了人类世界的生活方式
你知道操作系统都有些什么吗?Windows啊.这是我在上大学之前的问答,我当时认为只一种叫做Windows的操作系统,可是我错了,当我上大学以后,作为计算机专业的一名学生的时候我第一次接触到了除Win ...
- javascript 跑马灯
1.看了写跑马灯的教程案例,隔了段时间自己写了一个简单的跑马灯.将过程中遇到的问题特此记录下来 代码如下: <!DOCTYPE html> <html> <head> ...
- day26 第二阶段共享
第二阶段共享--网络编程 一.C/S架构 : 客户端(client)/服务端(sever)框架 B/S架构: 浏览器(brower)/服务端(sever)架构 软件CS架构: 服务端连接到浏览器,QQ ...
- zTree入门实例(一眼就看会)
zTree 是一个依靠 jQuery 实现的多功能 “树插件”. 下载地址:https://gitee.com/zTree/zTree_v3 待会将上面划的三个文件复制到Java的Web工程下即可 先 ...
- java项目性能测试过程记录
一 准备环境和指标 1.主机三台(linux,这里显示的都是伪主机地址):最好用干净的机子,做性能测试的时候别装其他东西在上面跑. 100.22.0.98 部署自己的项目服务 100.22.0.9 ...
- ON 子句和 WHERE 子句的不同
原文: https://www.cnblogs.com/zjfjava/p/6041445.html 即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学 ...
- leetcode第39题:组合综合
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重复被选 ...
- day 33 线程池有关的
# cpu 的核心数# import os# print(os.cpu_count()) ## 爬虫的进程和线程的应用# 第一步 虚拟一个浏览器下载 在cmd 里输入 pip install requ ...
- UIIimageView读取图片的两种方式及动画的执行
/**count:图片数量 name:图片名称*/ - (void)runAnimationWithCount:(int)count name:(NSString *)name { if(self.t ...