C/C++关键字——union

1.介绍

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

2.特点

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

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

3.使用方式

cpp 复制代码
union UnionName {
  member_type1 member1;
  member_type2 member2;
  member_type3 member3;
  // ...
};

4.例子

cpp 复制代码
#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;
}

输出结果:

cpp 复制代码
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)
相关推荐
蜗牛互联网10 分钟前
Python消费Responses SSE事件:增量文本、超时与取消
java·开发语言·人工智能·后端·python
郝学胜_神的一滴14 分钟前
游戏引擎原理与实践 04:拆解引擎基础系统与内存管理
c++·游戏
All for pursuit.31 分钟前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_3077791341 分钟前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
ttwuai1 小时前
Go后台管理系统开源项目:4个官方仓库怎么追溯和核验
开发语言·golang·开源
谢亮_vipxieliang1 小时前
Go Worker Pool 设计——从原理到生产级实现
开发语言·后端·golang
青少儿编程课堂1 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
倒头就睡的小比特1 小时前
C++多态
c++
Escalating_xu1 小时前
【C 语言】深入理解指针(5):sizeof、strlen、数组名语义与指针笔试题全解析
java·c语言·开发语言
Code_Solitude2 小时前
c语言:递归
java·c语言·算法