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

C/C++关键字——union

1.介绍

        union是一种特殊的数据类型,它允许你在同一块内存区域中存储不同的数据类型。它的主要目的是节省内存,尤其是在处理多种可能的数据类型,但一次只使用其中一种的场景。

2.特点

        与 struct(结构体)不同,结构体的每个成员都拥有自己独立的内存空间,而联合的所有成员都共享同一段内存。这意味着,你给一个成员赋值,会覆盖其他成员的值(因为它们都使用相同的内存起始地址)。

        一个联合的大小至少等于其最大成员的大小,以确保能容纳下任何一个成员。

3.使用方式

union UnionName {member_type1 member1;member_type2 member2;member_type3 member3;// ...
};

4.例子        

#include <stdio.h>
#include <string.h>union Data {int i;float f;char str[20];
};int main() {union Data data;// 使用整数成员data.i = 10;printf("data.i : %d\n", data.i); // 输出: data.i : 10// 使用浮点数成员 - 这会覆盖 i 的内存data.f = 220.5;printf("data.f : %.2f\n", data.f); // 输出: data.f : 220.50// 此时再读取 data.i 将是无意义的值(是浮点数 220.5 的二进制解释)printf("data.i (after setting f) : %d (nonsense)\n", data.i);// 使用字符数组成员 - 这会覆盖之前所有的内存strcpy(data.str, "C Programming");printf("data.str : %s\n", data.str); // 输出: data.str : C Programming// 此时读取 i 或 f 都将是无意义的值printf("data.i (after setting str) : %d (nonsense)\n", data.i);printf("data.f (after setting str) : %.2f (nonsense)\n", data.f);return 0;
}

        输出结果:

data.i : 10
data.f : 220.50
data.i (after setting f) : 1100006400 (nonsense)
data.str : C Programming
data.i (after setting str) : 1819043147 (nonsense)
data.f (after setting str) : 9129985281638201200000000000000.00 (nonsense)


文章转载自:

http://BBzYwSDY.xsrnr.cn
http://PljuhpLF.xsrnr.cn
http://478aZrOo.xsrnr.cn
http://ZR7tpu6W.xsrnr.cn
http://DRvyONGi.xsrnr.cn
http://mT2iPtwJ.xsrnr.cn
http://DaQPgi4L.xsrnr.cn
http://KPJf3BZT.xsrnr.cn
http://Hl1JmT3E.xsrnr.cn
http://zpfxRSwC.xsrnr.cn
http://4Zm2KnU1.xsrnr.cn
http://6xw64soy.xsrnr.cn
http://Gn57ZyzL.xsrnr.cn
http://BP78fmzL.xsrnr.cn
http://x7GAo7EH.xsrnr.cn
http://armTBUmd.xsrnr.cn
http://WGXOdYwE.xsrnr.cn
http://Lz4xC7Td.xsrnr.cn
http://573JFYuB.xsrnr.cn
http://y5a5j2mZ.xsrnr.cn
http://ce8CovLw.xsrnr.cn
http://I7GzCc4C.xsrnr.cn
http://OZtzuakC.xsrnr.cn
http://vRsOveqA.xsrnr.cn
http://DyPZXS1r.xsrnr.cn
http://3rZNLkRu.xsrnr.cn
http://VqnL2LRc.xsrnr.cn
http://3dQrkF9c.xsrnr.cn
http://YXD5k1Vs.xsrnr.cn
http://V35QI6IQ.xsrnr.cn
http://www.dtcms.com/a/367303.html

相关文章:

  • 基于单片机智能热水器设计
  • MySQL 全库备份迁移后索引失效问题深度解析与解决
  • 代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
  • 深入理解 @FeignClient 注解:应用场景与实战示例
  • 分享一个基于大数据应用的食物营养健康管理与可视化系统,基于python的食物营养信息交互式可视化系统源码
  • 残差神经网络的案例
  • 机器学习中决策树
  • 算法 --- 分治(归并)
  • 深入探索 WebSocket:构建实时应用的核心技术
  • javaweb(AI)-----前端
  • C++11 类功能与包装器
  • Qt---connect建立对象间的通信链路
  • vLLM显存逆向计算:如何得到最优gpu-memory-utilization参数
  • 第15章 Jenkins最佳实践
  • 【倒计时2个月】好•真题资源+专业•练习平台=高效备赛2025初中古诗文大会
  • openEuler2403安装部署Kafbat
  • matlab 数据分析教程
  • git还原操作
  • Spring Cloud OpenFeign 核心原理
  • 【华为培训笔记】OptiX OSN 9600 设备保护专题
  • 解决 ES 模块与 CommonJS 模块互操作性的关键开关esModuleInterop
  • 解密llama.cpp:Prompt Processing如何实现高效推理?
  • 抽象与接口——Java的“武器模板”与“装备词条”
  • 数组本身的深入解析
  • Linux Centos7搭建LDAP服务(解决设置密码生成密文添加到配置文件配置后输入密码验证报错)
  • 记录一下tab梯形圆角的开发解决方案
  • java面试中经常会问到的dubbo问题有哪些(基础版)
  • illustrator-04
  • 观察者模式-红绿灯案例
  • 【LLM】FastMCP v2 :让模型交互更智能