[牛人杂谈] C语言中的“结构体”与“联合体”

[复制链接]
 楼主| jcky001 发表于 2025-6-6 17:04 | 显示全部楼层 |阅读模式
  • 结构体(struct):组合不同类型数据(如学生信息)。[color=var(--header-text-color)]c

    struct Student {

        [color=var(--code-keyword-color)]char name[[color=var(--code-constant-color)]20];

        [color=var(--code-keyword-color)]int age;

    };


  • 联合体(union):共享内存空间(如解析二进制数据)。[color=var(--header-text-color)]c

    union Data {

        [color=var(--code-keyword-color)]int i;

        [color=var(--code-keyword-color)]float f;

    };



wengh2016 发表于 2025-6-8 20:43 | 显示全部楼层
联合体的所有成员共享同一块内存空间,因此联合体的大小等于其最大成员的大小。
修改一个成员会影响整个内存块,其他成员的值也会发生变化。
tifmill 发表于 2025-6-10 11:49 | 显示全部楼层
结构体变量可直接赋值(拷贝所有成员),但需注意指针成员的深拷贝问题(若成员是指针,需手动复制指向的内容)。
pentruman 发表于 2025-6-10 17:04 | 显示全部楼层
编译器会根据成员的类型自动调整存储位置,使每个成员的起始地址满足其对齐要求
lzbf 发表于 2025-6-12 13:19 | 显示全部楼层
联合体适合节省内存或解析二进制数据,但必须严格控制成员访问,避免数据覆盖。
gygp 发表于 2025-6-15 21:03 | 显示全部楼层
结构体和联合体的命名应清晰,注释需说明成员含义,避免复杂嵌套导致维护困难
youtome 发表于 2025-6-16 09:50 | 显示全部楼层
结构体适合组织关联数据,但需注意内存对齐带来的空间浪费。
timfordlare 发表于 2025-6-16 16:00 | 显示全部楼层
联合体的所有成员共享同一块内存,每次只能存储一个成员。修改一个成员会覆盖其他成员的值
mattlincoln 发表于 2025-6-16 22:02 | 显示全部楼层
联合体只能初始化第一个成员,其他成员的初始值是未定义的。
1988020566 发表于 2025-6-17 13:26 | 显示全部楼层
它们的核心区别在于内存布局:结构体的成员​​独立存储​​,而联合体的成员​​共享同一块内存​​。
fengm 发表于 2025-6-17 14:12 | 显示全部楼层
使用联合体时应特别注意类型安全,避免数据解释错误或程序崩溃。
phoenixwhite 发表于 2025-6-17 16:19 | 显示全部楼层
联合体的所有成员共享同一块内存,每次只能存储一个成员。修改一个成员会覆盖其他成员的值
uiint 发表于 2025-6-18 20:46 | 显示全部楼层
C语言中,​​结构体(struct)​​和​​联合体(union)​​是两种重要的自定义数据类型,用于组织和管理数据。
maqianqu 发表于 2025-6-18 22:19 | 显示全部楼层
结构体的成员按照声明的顺序存储在内存中,但编译器可能会根据成员的数据类型和对齐要求在成员之间插入填充字节,以满足特定的对齐规则。
janewood 发表于 2025-6-19 23:02 | 显示全部楼层
结构体成员的作用域与结构体变量绑定,外部无法直接访问
elsaflower 发表于 2025-6-20 10:39 | 显示全部楼层
注意结构体的总大小可能大于各成员大小之和,因为编译器会在末尾添加填充以满足对齐要求。
earlmax 发表于 2025-6-20 13:51 | 显示全部楼层
使用结构体指针时要注意内存泄漏和野指针问题。
biechedan 发表于 2025-6-20 14:53 | 显示全部楼层
结构体赋值(struct1 = struct2)是浅拷贝(直接复制内存内容)。若成员包含指针,需手动实现深拷贝。
gygp 发表于 2025-6-20 15:39 | 显示全部楼层
结构体可以逐个成员初始化,也可以使用初始化列表一次性初始化所有成员。
pl202 发表于 2025-6-20 16:18 | 显示全部楼层
结构体是多个不同类型数据的集合,每个成员拥有独立的存储空间,适用于组织​​相关但独立​​的数据。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1636

主题

5575

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部