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)
相关推荐
初願致夕霞6 小时前
C++11:类型推导与完美转发复盘笔记
c++
小猪写代码6 小时前
C++中什么是类,什么是对象
c++
Navigator_Z8 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
君顾19 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
Escalating_xu9 小时前
【C语言数据类型和变量·上】从内置类型到变量模型:一次讲透 sizeof、signed/unsigned 与作用域
c语言
香菜TTT10 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
钓鱼的肝10 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程
aramae10 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
jimy111 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++
蒸蒸yyyyzwd11 小时前
cpp 选手秋招学习笔记 day37 面经学习
c++·八股