当前位置: 首页 > news >正文

c++联合

结构体与联合体的区别

结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。

而联合体(union)中是各变量是“互斥”的——缺点就是不够“包容”;但优点是内存使用更为精细灵活,也节省了内存空间。

union DataU
{int i;		//4double d;	//8char s[7];	//7
};int main()
{cout << sizeof(DataU) << endl;DataU du;du.s[0] = 255;du.s[1] = 1;du.s[2] = 0;du.s[3] = 0;cout << du.i << endl;

在这里插入图片描述
char类型占1个字节
du.s[0]=255,du.s[0]在内存中的值是1111 1111
du.s[1]=1, du.s[1]在内存中的值是0000 0001
du.s[2]=0, du.s[2]在内存中的值是0000 0000
du.s[3]=0, du.s[3]在内存中的值是0000 0000

int类型占8个字节
du.i在内存中的值就是11111111 00000001 00000000
00000000 (小端存储,左边是低位,右边是高位)
所以i的实际值是511

联合体的应用

当角色是老师时,只用其中的course
当角色是学生时,只用其中的score
可以节省空间

struct Info
{char _name[20]; int _role;union{double score;char course[20];}_sc;
};
	Info a[4] = {Info("周老师",0,-1,"c++"),Info("周老师",0,-1,"C语言"),Info("王同学",1,90,""),Info("李同学",1,85,"")};for (int i = 0; i < 4; i++){if (a[i]._role == 0){cout << a[i]._name << "是一位老师,他是教" << a[i]._sc.course << "的" << endl;}if (a[i]._role == 1){cout << a[i]._name << "是一位学生,他的分数是" << a[i]._sc.score<<endl;}}

在这里插入图片描述

http://www.lryc.cn/news/475794.html

相关文章:

  • Edit Data. Create Cell Editors. Validate User Input 编辑数据。创建 Cell Editors。验证用户输入
  • Java 文件操作与IO流
  • 探索开源MiniMind项目:让大语言模型不再神秘(1)
  • Android 大疆面经
  • 【2024-10-31-2024-11-03】LeetCode刷题——python语法基础题
  • 【算法】二分查找
  • 第十五章 Vue工程化开发及Vue CLI脚手架
  • 【Grafana】Grafana 基础入门
  • 如何获取页面上所有input框
  • 0-ARM Linux驱动开发-字符设备
  • 使用 Faster Whisper 和 Gradio 实现实时语音转文字
  • redis v6.0.16 安装 基于Ubuntu 22.04
  • Milvus - 内存索引类型详解
  • 【STM32】按键控制LED 光敏传感器控制蜂鸣器
  • flutter-防抖
  • 什么是贪心算法
  • YOLOv6-4.0部分代码阅读笔记-effidehead_lite.py
  • 重学SpringBoot3-整合 Elasticsearch 8.x (一)客户端方式
  • 极简实现酷炫动效:Flutter隐式动画指南第三篇自定义Flutter隐式动画
  • 无人机维护保养、部件修理更换技术详解
  • xilinx vitis 更换硬件平台——ZYNQ学习笔记5
  • vscode makfile编译c程序
  • 【学术论文投稿】探索嵌入式硬件设计:揭秘智能设备的心脏
  • JavaScript 概述
  • 2024年10月个人工作生活总结
  • uniapp ,微信小程序,滚动(下滑,上拉)到底部加载下一页内容
  • MySQL中的日志类型有哪些?binlog、redolog和undolog的作用和区别是什么?
  • 【uni-app】创建自定义模板
  • Cesium移动Primitive位置
  • 安卓13默认连接wifi热点 android13默认连接wifi