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

C 语言联合体详解:多类型数据共享内存的高效管理

联合体 是 C 语言特殊数据类型,允许在同一内存位置存储不同数据类型。可定义多成员联合体,但任一时刻只能有一个成员包含值。联合体提供同一内存位置多用途的高效方式。

定义联合体

定义联合体须使用 union 语句,方式同定义结构体。union 语句为程序定义包含多成员的新数据类型。union 语句格式:

 union [union tag] { member definition; member definition; ... member definition; } [one or more union variables]; 

联合体标记 可选,每个成员定义为普通变量定义,如 int i; 或 float f; 等。联合体定义结束、最后分号前,可指定一个或多个联合体变量(可选)。定义包含 i、f、str 三成员的联合体类型 Data:

 union Data { int i; float f; char str[20]; } data; 

现在 Data 类型变量可存整数、浮点数或字符串。即单个变量(同一内存位置)可存多种类型数据。联合体内可用任何内置或用户定义数据类型。

联合体占用内存足以容纳最大成员。上例中 Data 类型占 20 字节,因字符串最多占 20 字节。下例显示联合体占用内存总大小:

Live Demo

 #include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0; } 

编译执行输出:

 Memory size occupied by data : 20 

访问联合体成员

访问联合体任意成员使用成员访问运算符 (.)。成员访问运算符为联合体变量名与成员名之间的句点。使用关键字 union 定义联合体类型变量。下例展示程序中使用联合体:

Live Demo

 #include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0; } 

编译执行输出:

 data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming 

可见 i 和 f 成员值损坏,因最后赋值的 str 占据了内存位置,故 str 成员打印正常。

再看同例但一次只用一个成员,这是联合体主要目的:

Live Demo

 #include <stdio.h> #include <string.h> union Data { int i; float f; char str[20]; }; int main( ) { union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0; } 

编译执行输出:

 data.i : 10 data.f : 220.500000 data.str : C Programming 

现在所有成员打印正常,因一次仅使用一个成员。

C语言

  1. 微处理器:存储程序计算的演进
  2. 综合 Op-Amp 数据:National Semiconductor 与 CA3130 数据手册
  3. 深入理解 C++ 数据类型:基础类型、修饰符与最佳实践
  4. C 语言数据类型详解:int、float、char 等核心类型完全指南
  5. C语言联合体详解:定义、用法与结构体对比
  6. C 语言数据类型完全指南:整型、浮点型、void 与派生类型
  7. C++数据结构实战:结构体struct定义、访问、函数参数、指针与typedef别名
  8. C++数据抽象实战:接口与实现分离的设计艺术
  9. C++数据封装:守护代码安全的核心机制
  10. C# 数据类型权威指南:值类型、引用类型、指针类型与 sizeof 实战
  11. MATLAB 数据类型完全指南:15 种基本类型、转换函数与类型判断函数速查表
  12. 精通Python数据类型:实战指南