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

C 语言结构体与联合体对比:实战指南与选择建议

什么是结构体?

结构体 是 C 语言用户自定义数据类型,将逻辑相关的不同类型数据项组合成单一单元。每个成员占用独立连续内存位置,因此结构体可同时保存多个值。

示例:一个学生记录,在同一变量名下存储姓名、学号、成绩。

什么是联合体?

联合体 也是用户自定义类型,但所有成员共享同一内存空间。联合体大小等于其最大成员大小。这一特性使联合体适合内存受限且同一时刻仅需一个成员的场景。

声明结构体

struct Student {
    char name[60];
    int roll_no;
    float marks;
};

注意 struct 关键字与右大括号后的分号。

结构体使用示例

#include <stdio.h>
struct Student {
    char name[60];
    int roll_no;
    float marks;
} sdt;
int main(void) {
    printf("Enter the following information:\n");
    printf("Student name: ");
    fgets(sdt.name, sizeof(sdt.name), stdin);
    printf("Roll number: ");
    scanf("%d", &sdt.roll_no);
    printf("Marks: ");
    scanf("%f", &sdt.marks);
    printf("\nEntered data:\n");
    printf("Name: %s", sdt.name);
    printf("Roll number: %d\n", sdt.roll_no);
    printf("Marks: %.1f\n", sdt.marks);
    return 0;
}

输出示例:

Enter the following information:
Student name: James
Roll number: 21
Marks: 67
Entered data:
Name: James
Roll number: 21
Marks: 67.0

声明联合体

union Item {
    int x;
    float y;
    char ch;
};

联合体使用示例

#include <stdio.h>
union Item {
    int x;
    float y;
    char ch;
};
int main(void) {
    union Item it;
    it.x = 12;
    it.y = 20.2f;
    it.ch = 'a';
    printf("x = %d\n", it.x);
    printf("y = %f\n", it.y);
    printf("ch = %c\n", it.ch);
    return 0;
}

因所有成员共享内存,设置 ch 会覆盖 x 与 y 的先前值。仅最后存储的值有效。

结构体 vs 联合体

C 语言结构体与联合体对比:实战指南与选择建议

特性结构体联合体
声明关键字structunion
内存布局每成员独立空间所有成员共享空间
修改某成员不影响其他成员覆盖其他成员
初始化可同时初始化所有成员同一时间只能初始化第一个成员
总大小所有成员大小之和最大成员大小
典型用途存储多种类型的相关数据存储多种可能类型中的一种
访问模式任意成员随时可访问同一时刻仅一个成员有效
柔性数组支持支持不支持

何时使用哪个

优缺点

结构体优势

结构体劣势

联合体优势

联合体劣势

C语言

  1. 钎焊与软焊关键差异全解析
  2. 二冲程与四冲程发动机核心区别深度解析
  3. 直流与交流电机核心差异与选型指南
  4. 石棉与玻璃纤维:关键差异、用途与安全考量
  5. C++ Struct 与 Class 核心差异、语法及最佳实践
  6. C# 与 C++ 深度对比:特性、性能与适用场景全景解析
  7. C 与 C++ 核心差异与选型指南
  8. C 语言与 Java 全方位对比:特性、历史与应用场景深度解析
  9. C 语言 strlen 与 sizeof 深度解析:核心差异、陷阱避坑与最佳实践
  10. Python 与 JavaScript:核心差异、特性及选型指南
  11. Python 与 Ruby:特性、优势与适用场景全面对比
  12. Python 2 与 Python 3:关键差异与版本选择指南