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)
相关推荐
我材不敲代码3 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬4 小时前
Java中的CAS机制详解
java·开发语言
-dzk-6 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
韩立学长6 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
froginwe116 小时前
Scala 循环
开发语言
m0_706653236 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你917 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu7 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
qq_423233907 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575347 小时前
分布式任务调度系统
开发语言·c++·算法