讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ union联合体用法_C++内存共用机制与字节序判断技巧

云辰大大_2815

云辰大大_2815

发布时间:2025-12-19 19:51:07

|

209人浏览过

|

来源于php中文网

原创

联合体是一种特殊复合类型,所有成员共享同一内存空间,大小等于最大成员长度。定义方式类似结构体,但成员从同一地址开始存储。例如:union Data { int i; float f; char str[4]; }; 使用时同一时间只能安全访问一个成员,写入一个成员会覆盖其他成员的值。如Data data; data.i = 10; cout

c++ union联合体用法_c++内存共用机制与字节序判断技巧

联合体(union)是C++中一种特殊的复合数据类型,它允许在同一个内存位置存储不同的数据类型。所有成员共享同一块内存空间,因此联合体的大小等于其最大成员所需的字节长度。这种机制在处理内存共用、类型转换和底层系统编程时非常有用,比如用于判断机器的字节序(endianness)。

联合体的基本用法

联合体的定义方式与结构体类似,但所有成员从同一地址开始存储:

union Data {
    int i;
    float f;
    char str[4];
};

使用示例:

Data data;
data.i = 10;
cout << "整型值: " << data.i << endl;

data.f = 2.5; // 覆盖之前的i值
cout << "浮点值: " << data.f << endl;

注意: 同一时间只能安全访问一个成员。写入一个成员后读取另一个会导致未定义行为,除非用于特定类型重解释(如类型双关)。

立即学习“C++免费学习笔记(深入)”;

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

利用联合体判断字节序

小端(Little-Endian)系统将低位字节存放在低地址,大端(Big-Endian)则相反。联合体可结合类型双关来检测当前平台的字节序:

bool isLittleEndian() {
    union {
        int i;
        char c;
    } test;
    test.i = 1;
    return test.c == 1; // 若最低字节为1,则为小端
}

原理:整数1在内存中的表示为 0x00000001。若其第一个字节(即char成员)为1,说明低地址存放低位字节,即小端模式。

联合体与类型双关(Type Punning)

联合体常用于绕过C++严格别名规则进行类型转换,例如将float按位转为int以查看IEEE 754表示:

union FloatInt {
    float f;
    int i;
};

FloatInt u;
u.f = 3.14f;
cout << "float 3.14 的整型表示: " << hex << u.i << endl;

重要提示: C++标准中通过非活跃成员访问数据属于未定义行为,但在大多数编译器(如GCC、Clang)中被支持并广泛用于系统级编程。更合规的方式是使用memcpy或std::bit_cast(C++20)。

联合体的限制与注意事项

  • 不能包含引用成员
  • 不能有虚函数或继承关系
  • 静态成员不被允许
  • C++11起支持含构造函数/析构函数的类作为成员,但需手动管理生命周期
  • 匿名联合体可在作用域内直接访问成员

基本上就这些。联合体是一种高效但需谨慎使用的工具,特别适合嵌入式开发、协议解析和性能敏感场景。掌握它有助于深入理解内存布局和硬件特性。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3271

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

542

2026.02.12

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

7187

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

844

2025.10.23

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5114

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5271

2025.07.04

c语言union的用法
c语言union的用法

c语言union的用法是一种特殊的数据类型,它允许在相同的内存位置存储不同的数据类型,union的使用可以帮助我们节省内存空间,并且可以方便地在不同的数据类型之间进行转换。使用union时需要注意对应的成员是有效的,并且只能同时访问一个成员。本专题为大家提供union相关的文章、下载、课程内容,供大家免费下载体验。

789

2023.09.27

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

扣子入门级教程
扣子入门级教程

共0课时 | 295人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn