《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》编程
共用体是一种特殊的数据类型,容许在相同的内存空间存储不一样的数据类型。共用体具备多个成员,但同一时刻只能有一个成员被赋值。共用体提供了一种使用相同的内存空间的有效方式。数组
使用 union 关键字定义共用体类型:ide
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
int i;
。union Data { int i; float f; char str[20]; } data;
如今,Data 共用体类型的变量能够存储一个整数、或一个浮点数,或一个字符串,这些数值都会存储在同一个内存空间,但同一时刻只会有一个数值存在,共用体占用的内存空间为共用体中最大的成员的空间。能够根据须要在一个共用体内使用任何内置的或用户自定义的数据类型。函数
下面的实例显示共用体占用的总内存大小:spa
#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 : %lu\n", sizeof(data)); return 0; }访问共用体成员
依旧是使用成员访问运算符 .
。指针
#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; }
运行:code
$ ./main data.i : 1917853763 data.f : 4122360580327794860452759994368.000000 data.str : C Programming
上述可见 data.i
和 data.f
的数值被损坏了,这是由于最后赋值的共用体变量成员 str 将 i 和 f 的内存空间覆盖了。内存
共用体正确的使用方法以下:字符串
#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; }
运行:编译器
$ ./main data.i : 10 data.f : 220.500000 data.str : C Programming