【C++】union

union是C语言提供的一个数据结构,可以让多个变量共用同一块内存。

用法

cpp 复制代码
union MyUnion
{
    int num;
    char my_char;
    double ff;
};

int main()
{
    MyUnion u1;
    u1.num = 1;
    cout << sizeof(u1) << endl;
}

如图,在MyUnion里声明了多个变量,而size则为其中最大的,就是double对应的8.

一旦为另外一个变量赋值,则赋的值在访问其他变量的时候,会强行解释为对应的变量。

cpp 复制代码
int main()
{
    MyUnion u1;
    u1.my_char = 48;
    cout << u1.my_char << endl;
    cout << u1.num << endl;
    cout << u1.ff << endl;
}

但是这里我不太理解,我赋值以后,好像变量的值并不固定。

感觉VS Code没法分析内存的占用,后面得折腾下VS了。

应用

讲一个很有意思的应用,union可以用来判断CPU是大端模式还是小端模式。

引用:如何判断CPU是大端还是小端模式

在各种体系的计算机中通常采用的字节存储机制主要有两种: Big-Endian和Little-Endian,即大端模式和小端模式。

Big-Endian和Little-Endian的定义如下:

  1. Little-Endian:就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
  2. Big-Endian:就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
cpp 复制代码
void checkCPU()
{
    union MyUnion{
        int a;
        char c;
    }test;
    test.a = 1;
    if (test.c == 1)
        cout << "little endian" <<endl;
    else cout << "big endian" <<endl;
}

int main()
{
    checkCPU();
    return 0;
}
相关推荐
JAVA面经实录917几秒前
MQ高频面试题标准答案(Java后端/架构面试背诵版)
java·面试·架构·kafka·rabbitmq
智者知已应修善业13 分钟前
【51单片机2个外部中断切换LED花样】2024-1-3
c++·经验分享·笔记·算法·51单片机
8Qi819 分钟前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
码不停蹄的玄黓23 分钟前
AQS底层原理
java
春日见23 分钟前
五分钟入门强化学习DDPG
大数据·人工智能·算法·机器学习·计算机视觉
玖釉-24 分钟前
Vulkan 示例解析:gltfscenerendering.cpp 如何渲染一个复杂 glTF 场景
c++·windows·图形渲染
糖果店的幽灵25 分钟前
Claude Code 完全实战指南 - 第四章:Skill 怎么写
java·服务器·前端
jeffer_liu32 分钟前
Spring AI 生产级实战:记忆管理
java·人工智能·后端·spring·语言模型
vivo互联网技术36 分钟前
ICLR 2026 | LiveMoments 用参考图引导的扩散模型提升重选封面帧画质
人工智能·算法·aigc技术探索