Consolexin's blog Consolexin's blog
首页
  • 算法基础

    • 图论
    • 字符串
    • 动态规划
    • 二分
    • 滑动窗口
    • 排序
  • Project

    • CppServer
  • 相关书籍

    • 现代C++编程
  • 书籍

    • SQL必知必会
    • MySQL必知必会
分类
标签
归档
GitHub (opens new window)

Consolexinhun

小学生
首页
  • 算法基础

    • 图论
    • 字符串
    • 动态规划
    • 二分
    • 滑动窗口
    • 排序
  • Project

    • CppServer
  • 相关书籍

    • 现代C++编程
  • 书籍

    • SQL必知必会
    • MySQL必知必会
分类
标签
归档
GitHub (opens new window)
  • enum-struct-control_flow

    • enum
    • struct_union
  • memory_management

  • modern_cpp_programming
  • enum-struct-control_flow
consolexinhun
2022-08-04

struct_union

结构体能将不同的变量放到一个单元里

struct A {
    int x;
    char y;
    float z;
};

1
2
3
4
5
6

没有名字的是匿名 结构体/共用体

struct A {
    struct { // anonymous struct
        int x, y;
    };
    char z;
};

1
2
3
4
5
6
7

bitfield 的宽度是固定的,可以保存字而不是字节

struct S1 {
    int b1 : 10; // range [0, 1023]
    int b2 : 10; // range [0, 1023]
    int b3 : 8; // range [0, 255]
}; // sizeof(S1): 4 bytes
struct S2 {
    int b1 : 10;
    int : 0; // reset: force the next field
    int b2 : 10; // to start at bit 32
}; // sizeof(S1): 8 bytes
1
2
3
4
5
6
7
8
9
10

共用体能在相同的内存位置存不同的数据类型

  • 只能容纳最大的数据成员
  • 数据成员的内容会被其他成员覆盖
union A {
    int x;
    char y;
}; // sizeof(A): 4
A a;
a.x = 1023; // bits: 00..000001111111111
a.y = 0; // bits: 00..000001100000000
cout << a.x; // print 512 + 256 = 768
1
2
3
4
5
6
7
8

小端模式的编码和内存中存储的顺序是相反的,y 是 x 的最后的字节

C++ 17 引入了 std::variant 表示安全的共用体

编辑 (opens new window)
上次更新: 2025/05/21, 06:42:57
enum
heap_stack

← enum heap_stack→

最近更新
01
6-其他操作
05-20
02
4-联结
05-20
03
7-管理
05-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Consolexinhun | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×