亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C语言联合体详解:定义、用法与结构体对比

C语言联合体详解

学习如何定义、创建和访问C联合体,理解其在内存布局和应用上与结构体的差异。

联合体是C语言用户定义类型,与结构体不同,同一时刻只能保存一个成员值。这使联合体适合内存高效的数据表示和底层编程中的类型双关。


定义联合体

使用 union 关键字声明新类型。例如:

union Car {
    char name[50];
    int price;
};

上述代码创建派生类型 union Car,可存储 50 字符字符串或整型价格。


创建联合体变量

定义联合体不分配内存。使用时声明该类型变量:

union Car car1, car2, *car3;

也可合并定义和变量声明:

union Car {
    char name[50];
    int price;
} car1, car2, *car3;

两例中 car1 和 car2 是联合体实例,car3 是联合体指针。


访问联合体成员

直接访问用点(.)运算符,指针访问用箭头(->):


联合体 vs 结构体

结构体为所有成员分配空间,联合体大小等于其最大成员大小。对比示例:

#include <stdio.h>
union UnionJob {
    char name[32];
    float salary;
    int workerNo;
} uJob;
struct StructJob {
    char name[32];
    float salary;
    int workerNo;
} sJob;
int main() {
    printf("size of union = %zu bytes\n", sizeof(uJob));
    printf("size of structure = %zu bytes", sizeof(sJob));
    return 0;
}

输出:

size of union = 32
size of structure = 40

结构体占 40 字节(32+4+4),联合体仅 32 字节——最大成员 name[32] 的大小。所有联合体成员共享同一内存区域。


实战示例:成员覆盖

#include <stdio.h>
union Job {
    float salary;
    int workerNo;
} j;
int main() {
    j.salary = 12.3;
    j.workerNo = 100; // 覆盖前一个值
    printf("Salary = %.1f\n", j.salary);
    printf("Number of workers = %d", j.workerNo);
    return 0;
}

输出:

Salary = 0.0
Number of workers = 100

因 salary 和 workerNo 共享内存,写入其中一个会清除另一个。


探索实际用例,阅读 为何需要C联合体?。

C语言

  1. 商用空调选型专家指南:精准匹配功率实现最优性能
  2. 制造业AI市场2026年将达48亿美元 年复合增长率28.1%
  3. CNC 加工尺寸约束全景指南:铣削包络、车削极限、后处理尺寸门槛
  4. 掌握气动阀门选型:实用指南
  5. 管道接头解析:定义、用途与优势
  6. 枪械加工车床选型全攻略:尺寸、功能与建议
  7. 储气罐选型指南:优化性能与效率的关键
  8. 工业空压机选型专家指南:精准匹配您的生产需求
  9. 铝棒切割专业指南:安全精准的关键技术
  10. C 语言联合体详解:多类型数据共享内存的高效管理
  11. 精通 Java 枚举:枚举类与枚举常量完全指南
  12. Java 枚举构造器详解与实战示例